我正在开发一个Chrome扩展程序,它从某些网站向我控制的API发出请求。在Chrome 73之前,该扩展程序正常工作。升级到Chrome 73后,我开始收到以下错误:
Cross-Origin Read Blocking (CORB) blocked cross origin response http://localhost:3000/api/users/1 with MIME type application/json
根据Chrome关于CORB的文档,如果以下所有条件都成立,则CORB将阻止请求的响应:
资源是“数据资源”。具体来说,内容类型为HTML、XML或JSON
服务器响应带有
X-Content-Type-Options: nosniff
头部,或者如果省略此头部,Chrome通过检查文件确定内容类型为HTML、XML或JSONCORS未明确允许访问该资源
此外,根据"Spectre和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 阻止?