为什么没有 options 请求

根据跨域的介绍,非简单请求均会跨域,均会发起 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


image.png

阅读 5.9k
4 个回答

image.png
这个描述是不准确的,完整的描述应该是
image.png
image.png
也就是说,简单请求的请求头,不仅仅包含这几个
Accept
Accept-Language
Content-Language
Last-Event-ID

还包含这些
image.png

总而言之,可以理解为,可以由开发手动配置的请求头只有这四个Accept、Accept-Language、Content-Language、Last-Event-ID,其他由浏览器自行添加的请求头不受影响

上面罗列那些,是由浏览器或代理服务器自行添加的

阮一峰的文章里面也有相关的讨论,但埋的比较深
image.png

因为被你过滤掉了,哈哈哈哈
你想看 OPTIONS 请求,光选择 Fetch/XHR 这一栏是无论如何也显示不出来的

image.png

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...

虽然我也没有搞清楚是不是这个原因,记录一下,我也很实疑惑

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题