在 Chrome 76 及以上版本中,Network 面板默认可能不显示 CORS 预检 OPTIONS 请求,这是因为 Blink 引擎优化了跨域处理逻辑。要查看详细信息,需通过 chrome://flags 调整实验性功能设置,或确认请求是否触发了非简单跨域条件。
先说结论:Chrome 浏览器内核优化导致预检请求在开发者工具中默认隐藏,需手动开启特定标志位或检查请求类型。
- 适合场景:Chrome 76 及以上版本调试跨域问题,且确认请求应为非简单请求。
- 先处理:检查 chrome://flags 中的 Out-of-Blink-CORS 设置,将其 Disabled 以恢复显示。
- 再验证:刷新页面后观察 Network 面板是否出现 Method 为 OPTIONS 的请求记录。
快速处理思路
若 Network 面板缺失 OPTIONS 请求,按以下顺序排查:首先确认 Chrome 版本号是否大于等于 76,其次检查 flags 实验性设置是否开启了优化选项,最后确认请求头是否包含自定义字段以触发预检机制。
为什么会这样
Chrome 76 版本后 Blink 引擎将部分 CORS 逻辑移至更底层处理,导致开发者工具无法捕获预检请求。这种架构调整提升了性能,但使得 Network 面板默认不再展示底层 OPTIONS 交互。公开资料中没有看到可靠的量化数据说明性能提升具体比例,但确认了该行为与引擎优化有关。
分步处理
第一步:打开 Chrome 开发者工具。在网页任意元素右键点击选择“检查”,或使用快捷键 Ctrl + Shift + I(Windows)/ Cmd + Opt + I(Mac)。
第二步:调整实验性功能。在地址栏输入 chrome://flags/#out-of-blink-cors,找到 Out-of-Blink-CORS 选项,将其状态设置为 Disabled。
第三步:重启浏览器并清理缓存。设置生效后需完全重启 Chrome,并在 Network 面板勾选 Preserve log 防止日志清除。
第四步:筛选请求类型。在 Network 面板过滤器中选择 Fetch/XHR,排除图片及样式表干扰,专注查看 API 请求。
怎么验证是否生效
刷新目标页面,观察 Network 面板请求列表。若配置正确,应能看到 Method 列显示 OPTIONS 的请求,且状态码通常为 200 或 204。点击该请求查看 Headers 标签,确认存在 Access-Control-Request-Method 和 Access-Control-Request-Headers 字段。
常见坑
简单请求不会触发预检。若请求方法为 GET/HEAD/POST 且 Content-Type 为 application/x-www-form-urlencoded、multipart/form-data 或 text/plain,浏览器不会发送 OPTIONS 请求,此时 Network 面板自然没有记录。
缓存可能导致请求消失。浏览器可能缓存了预检结果,导致后续请求直接发送实际请求。调试时建议在 Network 面板勾选 Disable cache 或使用无痕模式。
flags 设置随版本变化。chrome://flags 中的选项可能在新版本中被移除或默认值改变,若找不到该选项,建议改用 Firefox 开发者工具或 Wireshark 进行抓包对比。
常见问题
为什么我的请求没有触发 OPTIONS 预检?
因为该请求符合简单请求标准,不需要预检。只有使用 PUT/DELETE 方法、自定义请求头或非安全 Content-Type 时才会触发。
修改 flags 后仍然看不到 OPTIONS 请求怎么办?
尝试使用 Firefox 浏览器开发者工具或 Wireshark 抓包,不同浏览器内核对 CORS 实现细节存在差异。
预检请求返回 403 或 404 如何解决?
检查服务器端 CORS 配置,确保 OPTIONS 方法被允许,且返回了正确的 Access-Control-Allow-Origin 响应头。
参考来源
跨域调试必备技能:如何让 Chrome 的 Network 面板完整显示 OPTIONS 预检请求
Chrome 开发者工具 Network 标签不显示 OPTIONS 请求?3 步搞定这个隐藏问题
【Chrome 开发者工具】network 面板_network 面板-CSDN 博客
别再混淆了!一文彻底搞懂跨域 (CORS) 原理与手工测试方法