1. 程式人生 > 其它 >koa2 設定Access-Control-Allow-Origin 解決前端跨域問題

koa2 設定Access-Control-Allow-Origin 解決前端跨域問題

文章原文: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();
});

解析:

  1. 如果只有 ctx.set('Access-Control-Allow-Origin', '*'); 是不行的,因為post 請求,請求頭會有 Content-Type, 必須在服務端加上處理
  2. 同樣也得加上請求方式的處理 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"是伺服器有的域名,而不能是"*";