根据跨域的介绍,非简单请求均会跨域,均会发起 options 请求,为什么这里明明有 sec-ch-ua,host 等请求头,超过了以下限制,却没有发起 options 请求?
HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
根据跨域的介绍,非简单请求均会跨域,均会发起 options 请求,为什么这里明明有 sec-ch-ua,host 等请求头,超过了以下限制,却没有发起 options 请求?
HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
Chrome 现在不展示 CORS 相关的 OPTIONS 请求。
参见 https://www.chromium.org/Home...
CORS releated detailed network transaction can not be observed via DevTools' Network tab. You need to take a NetLog dump for further investigation. You can use ==netlogchk.html== to analyze the obtained NetLog dump to see if there is CORS related error. NetLog Viewer is general purpose online tools to check details on the dump.
根据mdn关于简单请求的描述:https://developer.mozilla.org...
Apart from the headers automatically set by the user agent (for example, Connection, User-Agent, or the other headers defined in the Fetch spec as a forbidden header name), the only headers which are allowed to be manually set are those which the Fetch spec defines as a CORS-safelisted request-header
其中提到的forbidden header name参考这个:https://fetch.spec.whatwg.org...
然后搜了一下sec-ch-ua好像也算是forbidden的:https://developer.mozilla.org...
虽然我也没有搞清楚是不是这个原因,记录一下,我也很实疑惑
10 回答11.3k 阅读
4 回答14.3k 阅读✓ 已解决
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
这个描述是不准确的,完整的描述应该是
也就是说,简单请求的请求头,不仅仅包含这几个
Accept
Accept-Language
Content-Language
Last-Event-ID
还包含这些

总而言之,可以理解为,可以由开发手动配置的请求头只有这四个Accept、Accept-Language、Content-Language、Last-Event-ID,其他由浏览器自行添加的请求头不受影响
上面罗列那些,是由浏览器或代理服务器自行添加的
阮一峰的文章里面也有相关的讨论,但埋的比较深
