对 html 资源获取的 no-cors 不透明请求被 CORB 阻止
no-cors opaque request for html resource fetch blocked by CORB
我正在尝试使用 no-cors
模式从 https://app.test
获取位于 url https://sub.app.test/html
的 html
文件,但响应被 CORB 阻止(跨源读取阻塞)。
fetch('https://sub.app.test/html', { mode: 'no-cors'})
为什么?
即使使用 no-cors
模式(因此响应不需要 Access-Control-Allow-Origin
被允许)请求被 CORB 阻止,因为 html 内容被认为数据资源(它可能包含敏感数据)。任何具有 MIME 类型 text/html
的资源(并且 html 在响应中被嗅探 body 或 X-Content-Type-Options: nosniff
被设置)将被 CORB 阻止,以便敏感数据不能使用推测泄露side-channel 像 Spectre 漏洞这样的攻击(资源不会被添加到站点渲染器的内存中)。
有几种方法可以绕过这个限制:
- 从同一来源提供资源 (
app.test
)
- 使用
cors
模式(服务器需要添加正确的Access-Control
header)
- 将 MIME 类型更改为
text/html
以外的类型,或者根本不设置 header(hacky)
阅读更多:
我正在尝试使用 no-cors
模式从 https://app.test
获取位于 url https://sub.app.test/html
的 html
文件,但响应被 CORB 阻止(跨源读取阻塞)。
fetch('https://sub.app.test/html', { mode: 'no-cors'})
为什么?
即使使用 no-cors
模式(因此响应不需要 Access-Control-Allow-Origin
被允许)请求被 CORB 阻止,因为 html 内容被认为数据资源(它可能包含敏感数据)。任何具有 MIME 类型 text/html
的资源(并且 html 在响应中被嗅探 body 或 X-Content-Type-Options: nosniff
被设置)将被 CORB 阻止,以便敏感数据不能使用推测泄露side-channel 像 Spectre 漏洞这样的攻击(资源不会被添加到站点渲染器的内存中)。
有几种方法可以绕过这个限制:
- 从同一来源提供资源 (
app.test
) - 使用
cors
模式(服务器需要添加正确的Access-Control
header) - 将 MIME 类型更改为
text/html
以外的类型,或者根本不设置 header(hacky)
阅读更多: