Eva*_*ahn 7 node.js helmet.js cross-origin-embedder-policy
使用 Helmet.js 时,我在浏览器控制台中看到以下错误:
net::ERR_BLOCKED_BY_RESPONSE.NotSameOriginAfterDefaultedToSameOriginByCoep
Run Code Online (Sandbox Code Playgroud)
我应该怎么办?
Eva*_*ahn 15
tl;dr: 禁用header Cross-Origin-Embedder-Policy,在 Helmet v5 中默认启用。
app.use(
helmet({
crossOriginEmbedderPolicy: false,
// ...
})
);
Run Code Online (Sandbox Code Playgroud)
Helmet v5 将HTTPCross-Origin-Embedder-Policy响应标头设置为require-corp. (这在 Helmet v4 中是可能的,但默认情况下它是关闭的,所以大多数人没有使用它。)
设置此标头意味着加载跨域资源(例如来自另一个资源的图像)会更加棘手。例如,加载这样的跨域......
<img alt="My picture" src="https://example.com/image.png">
Run Code Online (Sandbox Code Playgroud)
example.com...除非通过设置自己的一些响应标头明确允许,否则将无法工作。您的浏览器将尝试加载example.com/image.png,如果未明确允许,您的浏览器将丢弃响应。
要解决此问题,您可以阻止 Helmet 设置Cross-Origin-Embedder-Policy标头,如下所示:
app.use(
helmet({
crossOriginEmbedderPolicy: false,
// ...
})
);
Run Code Online (Sandbox Code Playgroud)
我制作了一个小示例应用程序,您可以用它来解决这个问题。在我的测试中,它似乎在 HTTP 中不起作用,但在 HTTPS 上却可以,这也许可以解释为什么事情只会在生产中出现问题。