1

I'm trying to fetch html file located at url https://sub.app.test/html from https://app.test using no-cors mode but the response is blocked by CORB (cross-origin read blocking).

fetch('https://sub.app.test/html', { mode: 'no-cors'})

Why?

4

1 回答 1

5

即使no-cors使用了模式(因此不必Access-Control-Allow-Origin允许响应),请求也会被 CORB 阻止,因为 html 内容被视为数据资源(它可能包含敏感数据)。任何具有 MIME 类型的资源text/html(并且 html 在响应正文中被嗅探或X-Content-Type-Options: nosniff设置)都将被 CORB 阻止,这样敏感数据就不会使用 Spectre 漏洞等推测性侧信道攻击泄露(资源不会添加到站点渲染器的内存)。

有几种方法可以绕过这个约束:

  • 提供来自同一来源的资源 ( app.test)
  • 使用cors模式(服务器需要添加正确的Access-Controlheader)
  • 将 MIME 类型更改为其他内容text/html或根本不设置标题(hacky)

阅读更多:

于 2019-02-27T17:18:31.713 回答