javascript – 使用所有方法发送预检请求

前端之家收集整理的这篇文章主要介绍了javascript – 使用所有方法发送预检请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的FE应用程序正在使用来自不同域的API.我知道它应该触发CORS,但据我所知它不应该为每个请求创建预检.

根据docs,我不应该有预检请求GET方法.

Cross-site requests are preflighted like this since they may have implications to 
 user data. In particular,a request is preflighted if:

    - It uses methods other than GET,HEAD or POST. 
Also,if POST is used to send request data with a Content-Type 
other than application/x-www-form-urlencoded,multipart/form-data,or text/plain,e.g. if the POST request sends an XML payload to the
server using application/xml or text/xml,then the request is preflighted.
    - It sets custom headers in the request 
(e.g. the request uses a header such as X-PINGOTHER)

但是,我发送的每个请求都有预检(OPTIONS)请求,无论是GET还是POST,我发现它很奇怪(根据文档说的那样).

我设置了一些标题(我发送它与withCredentials:true),但我不认为它应该是问题:

headers.append('Access-Control-Allow-Origin',FRONTEND_URL);
  headers.append('Accept','application/json');
  headers.append('Content-Type','application/json');
  headers.append('Authorization',this._generateApiKey());
  headers.append('Language',this._languageISOCode);

我错过了什么吗?

解决方法

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Simple_requests

即使对于GET请求,简单请求中Content-Type标头的唯一允许值是application / x-www-form-urlencoded,multipart / form-data和text / plain.任何其他Content-Type值都会触发浏览器进行预检.

这是因为Fetch规范(定义了CORS行为)指定了它所称的CORS-safelisted request-header,它定义为以下之一:

>接受
>接受语言
>内容 – 语言
> Content-Type,其值一经解析,就具有MIME类型(忽略参数),即application / x-www-form-urlencoded,multipart / form-data或text / plain

任何请求 – 包括任何GET请求 – 包含不是CORS安全的请求标头的标头会触发预检.

为了使这一切更加清晰,我更新了the MDN documentation about CORS “simple requests”the MDN documentation about CORS preflighted requests(它实际上比上面描述的稍微复杂一点 – 但是上面的内容足以满足这个问题的背景).

请注意,WebKit / Safari对Accept,Accept-Language和Content-Language标头中允许的值设置了额外的限制.

如果这些标题中的任何一个具有“非标准”值,WebKit / Safari将进行预检.

至于WebKit / Safari认为这些标题的“非标准”值,除了以下WebKit错误之外,没有真正记录:

> Require preflight for non-standard CORS-safelisted request headers Accept,Accept-Language,and Content-Language
> Allow commas in Accept,and Content-Language request headers for simple CORS
> Switch to a blacklist model for restricted Accept headers in simple CORS requests

没有其他浏览器实现这些额外的限制,因为它们不是规范的一部分.它们被单方面添加到WebKit,而没有与规范编辑器或其他浏览器进行任何讨论.

原文链接:https://www.f2er.com/js/158409.html

猜你在找的JavaScript相关文章