我有兩臺服務器,前端(Next.js)和后端(express.js api 服務器)。
前端服務器正在運行,沒有任何添加。但我有一個用于后端的 nginx 代理。
到目前為止一切都很好,因為它們還沒有連接。
前端:正在正常作業。
后端:我可以直接從后端本身(通過自源)撥打電話。

當我從前端服務器向后端服務器進行 fetch get 呼叫時,它通常會給出一個 cors 錯誤,因為來源不同。
為此,我使用 cors 設定后端服務器:
// /src/middlewares/cors.ts
import cors from 'cors';
const whitelist = new Set(['http://192.168.1.106:3000', 'https://192.168.148.132']);
// frontend: http://192.168.1.106:3000
// backend: https://192.168.148.132
const corsOptions = {
optionsSuccessStatus: 200,
origin: (origin: any, callback: any) => {
console.log('origin: ' origin);
if (whitelist.has(origin)) {
callback(null, true);
} else {
callback(new Error('Not allowed by CORS'));
}
},
// credentials: true,
};
export default cors(corsOptions);
和
// /app.ts
import cors from './middlewares/system/cors.js';
.
.
// setup cors
app.options('*', cors);
app.use(cors);
.
.
這樣做之后,我就達到了我的主要目標。前端服務器可以呼叫后端服務器。
輸出:
但這一次我發現了一個問題。我不能再向后端發送自我請求(通過自我起源)。

在處理這個問題時,我查看了上面顯示的 /src/middlewares/cors.ts 檔案的來源。

- 對于前端:

- 對于后端:

我在 nginx 中使用自簽名 ssl 作為后端服務器。并且 conf 中沒有任何與 cors 相關的標頭。
我該如何解決這種情況?
(如果我遺漏了什么,您可以在評論中指出。)
uj5u.com熱心網友回復:
該Origin標題僅在跨域請求設定。如果你直接呼叫你的后端,Javascript 的值為undefined,在這種情況下你不能限制任何東西。例如,你可以寫
if (!origin || whitelist.has(origin)) {
callback(null, true);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/420970.html
標籤:
