为什么CORS校验报错称预检请求的HTTP状态不是ok状态?
问题根因
你发起的请求携带了自定义的ApiKey请求头,会触发CORS预检OPTIONS请求,Chrome对第三方CORS扩展处理预检请求的逻辑和Firefox存在差异,因此仅Chrome侧报错。
可行解决建议
- 优先使用Chrome扩展原生跨域权限,无需依赖第三方CORS绕过工具。在你开发的扩展的
manifest.json中配置对应权限即可:- Manifest V3版本:在
host_permissions数组中添加你需要请求的API域名,比如"https://api.example.com/*"、"https://myexampleapi.com/*" - Manifest V2版本:在
permissions数组中添加上述域名配置
配置完成后扩展发起的请求会直接获得跨域权限,不会触发CORS校验,也无需发送预检请求。
- Manifest V3版本:在
- 如果必须使用第三方CORS扩展,需要修改扩展配置:
多数CORS扩展默认仅处理实际业务请求,未适配OPTIONS预检请求,需要进入扩展设置页,开启处理OPTIONS请求的开关,配置规则时包含OPTIONS请求方法,同时手动添加响应头Access-Control-Allow-Headers: ApiKey,设置预检响应状态码为200/204即可。 - 本地临时调试可直接启动Chrome禁用安全模式,完全关闭CORS校验:
- Windows:右键Chrome快捷方式,在「目标」输入框的原有内容后追加
--disable-web-security --user-data-dir="C:\ChromeDebug",保存后打开该快捷方式即可 - Mac:终端执行命令
open -n /Applications/Google\ Chrome.app --args --disable-web-security --user-data-dir=/tmp/ChromeDebug
- Windows:右键Chrome快捷方式,在「目标」输入框的原有内容后追加
- 无法调整扩展配置或权限的前提下,可将自定义
ApiKey头转移到URL查询参数中传递,移除xmlHttp.setRequestHeader相关代码,避免触发预检请求,普通GET请求可被常规CORS扩展正常适配。
内容的提问来源于stack exchange,提问作者Syllith
相关产品推荐
相关产品推荐

