我未能使用最新的NestJS 8.0.6和一個新的http ws專案啟用CORS進行測驗。也就是說,我想在服務器回應中看到Access-Control-Allow-Origin(這樣客戶端就會接受它)。 這是我的main.ts,我已經嘗試了3種方法。1)使用選項,2)使用一個方法,3)使用app.use。這些方法都不起作用。
import { NestFactory } from '@nestjs/core'/span>;
import { AppModule } from ' ./app.module';
import { microserviceConfig}. from "./msKafkaConfig" ;
async function bootstrap(){
const app = await NestFactory. create(AppModule, { cors: true}); // DOESN'T WORK
app.enableCors(); //DOESN'T WORK。
app.connectMicroservice(microserviceConfig)。
await app.startAllMicroservices()。
// DOESN'T WORK
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*') 。
res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, PATCH, OPTIONS, UPGRADE, CONNECT, TRACE')。
res.header('Access-Control-Allow-Headers'/span>, 'Content-Type, Accept'/span>)。
next()。
});
await app.listen(3000)。
}
bootstrap()。
請不要給我講如果我們接受所有的域,CORS(XSForgery)是多么危險。而且我很清楚這一點。這是關于NestJS沒有回復頭中的Access-Control-Allow-Origin元素。
瀏覽器控制臺報告:
Access to XMLHttpRequest at 'http://localhost:3000/socket.io/? EIO=4&transport=polling&t=Nm4kVQ1' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin'頭存在于請求資源上。
在chrome的頭資訊檢查中,我看到:
Request URL。http:/localhost:3000/socket.io/?EIO=4& transport=polling& t=Nm4kUZ-
推薦人 政策: strict-origin-when-cross-origin
Connection: keep-alive
Content-Length。97
內容-型別: text/lain; charset=UTF-8
Date: Mon, 20 Sep 2021 19: 41: 05 GMT
Keep-Alive: timeout=5.
Accept。*/*
接受-編碼: gzip, deflate, br
接受語言: en,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,es;q=0.6
快取控制: no-cache
連接: keep-alive
主機: localhost:3000
來源: http://localhost:4200
Pragma: no-cache
參考者: http://localhost:4200/
sec-ch-ua: "Google Chrome";v="93", " Not;A Brand";v="99", " Chromium";v="93"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Sec-Fetch-Dest: 空
Sec-Fetch-Mode: cors
Sec-Fetch-Site: 同站
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
EIO: 4
運輸:輪詢
t: Nm4kUZ-
Referrer Policy: strict-origin-when-cross-origin是否有影響?
(btw, it works just fine with a simple express setup. 所以這不可能是我的瀏覽器的錯。)
uj5u.com熱心網友回復:
enableCors和{ cors: true }選項是針對HTTP服務器(express或fastify)。顯示 CORS 錯誤的 URL 來自一個 socket.io 連接。要為socket.io啟用CORS,你需要使用@WebsocketGateway()裝飾器中的選項,例如
@WebsocketGateway({cors: '*:*' })
export class FooGateway {}。
確保將websocket cors的主機和埠都設定為host:port
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/322217.html
標籤:
