請我需要幫助,我檢查了所有谷歌并沒有得到真正的答案來打開我的問題。我想用頭盔來保護我的快遞服務器。但是當我使用它時,我收到此錯誤:ERR_BLOCKED_BY_RESPONSE.NotSameOrigin 200 用于從我的資料庫中加載我的影像。這是我的服務器快遞:
// Initialize server
const app = express()
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(cookieParser());
app.use(cors())
app.use(helmet())
// CORS configuration
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
我從我的資料庫中獲取我的影像,所以 localhost 中的 url 是:http://localhost:3000/image/<name_image>
當我不使用頭盔時,一切正常。
請任何幫助
uj5u.com熱心網友回復:
在谷歌上看了很長時間后,我從這里得到了解決方案: https ://github.com/helmetjs/helmet/issues/176 我添加了這一行:
res.setHeader('Cross-Origin-Resource-Policy', 'same-site');
并且只需重繪 和清除快取(MAC 上的 cmd R 和其他人的 ctrl R ),它就像一個魅力。謝謝埃文哈恩
uj5u.com熱心網友回復:
tl;dr:禁用標Cross-Origin-Embedder-Policy頭,在 Helmet v5 中默認啟用。
app.use(
helmet({
crossOriginEmbedderPolicy: false,
// ...
})
);
頭盔維護者在這里。
Helmet 將HTTPCross-Origin-Embedder-Policy回應標頭設定為require-corp.
設定此標頭意味著加載跨域資源(如來自另一個資源的影像)更加棘手。例如,加載這樣的跨域...
<img alt="My picture" src="https://example.com/image.png">
example.com...除非通過設定自己的一些回應標頭明確允許,否則將不起作用。您的瀏覽器將嘗試加載example.com/image.png,如果未明確允許,您的瀏覽器將丟棄回應。
要解決此問題,您可以阻止 Helmet 設定Cross-Origin-Embedder-Policy標題,如下所示:
app.use(
helmet({
crossOriginEmbedderPolicy: false,
// ...
})
);
我制作了一個小示例應用程式,您可以使用它來玩這個。在我的測驗中,它似乎在 HTTP 中不起作用,但它通過HTTPS 起作用,這可能解釋了為什么事情只會在生產中中斷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/414722.html
標籤:
