koa2 設定Access-Control-Allow-Origin 解決前端跨域問題
阿新 • • 發佈:2021-06-30
文章原文:https://www.cnblogs.com/yalong/p/14954672.html
跨域資源共享(CORS) 詳解看這裡:
https://www.ruanyifeng.com/blog/2016/04/cors.html
koa2 實現對post請求的跨域資源共享,只需加入如下中介軟體即可:
app.use(async (ctx, next)=> { ctx.set('Access-Control-Allow-Origin', '*'); ctx.set('Access-Control-Allow-Headers', 'Content-Type'); ctx.set('Access-Control-Allow-Methods', 'POST'); await next(); });
解析:
- 如果只有
ctx.set('Access-Control-Allow-Origin', '*');
是不行的,因為post
請求,請求頭會有Content-Type
, 必須在服務端加上處理 - 同樣也得加上請求方式的處理
ctx.set('Access-Control-Allow-Methods', 'POST');
CORS 更多的設定如下:
ctx.set('Access-Control-Allow-Origin', '*'); //允許來自所有域名請求(不攜帶cookie請求可以用*,如果有攜帶cookie請求必須指定域名) // ctx.set("Access-Control-Allow-Origin", "http://localhost:8080"); // 只允許指定域名http://localhost:8080的請求 ctx.set('Access-Control-Allow-Methods', 'OPTIONS, GET, PUT, POST, DELETE'); // 設定所允許的HTTP請求方法 ctx.set('Access-Control-Allow-Headers', 'x-requested-with, accept, origin, content-type'); //欄位是必需的。它也是一個逗號分隔的字串,表明伺服器支援的所有頭資訊欄位. // 伺服器收到請求以後,檢查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers欄位以後,確認允許跨源請求,就可以做出迴應。 ctx.set('Access-Control-Allow-Credentials', true); // 該欄位可選。它的值是一個布林值,表示是否允許傳送Cookie。預設情況下,Cookie不包括在CORS請求之中。 // 當設定成允許請求攜帶cookie時,需要保證"Access-Control-Allow-Origin"是伺服器有的域名,而不能是"*";