我正在开发一个 Chrome 扩展程序,它可以从某些网站向我控制的 API 发出请求。在 Chrome 73 之前,该扩展程序可以正常工作。升级到 Chrome 73 后,我开始收到以下错误:
跨源读取阻止 (CORB) 阻止 了具有 MIME 类型 application/json 的跨源响应http://localhost:3000/api/users/1
根据Chrome 关于 CORB 的文档,如果满足以下所有条件,CORB 将阻止请求的响应:
该资源是“数据资源”。具体来说,内容类型为 HTML、XML、JSON
服务器以
X-Content-Type-Options: nosniff
标头响应,或者如果省略此标头,Chrome 通过检查文件检测到内容类型是 HTML、XML 或 JSON 之一CORS 没有明确允许访问资源
此外,根据“Spectre and Meltdown 的教训”(Google I/O 2018)mode: cors
,添加到调用中似乎很重要fetch
,即fetch(url, { mode: 'cors' })
.
为了解决这个问题,我做了以下更改:
首先,我将以下标头添加到我的 API 的所有响应中:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Origin: https://www.example.com
其次,我更新了fetch()
对扩展的调用,如下所示:
fetch(url, { credentials: 'include', mode: 'cors' })
然而,这些改变并没有奏效。我可以更改什么以使我的请求不会被 CORB 阻止?