CORS 中介軟體

此示例演示如何使用中介軟體處理跨源 http 請求。

CORS 背景

CORS 是所有主流瀏覽器採用的一種訪問控制方法,用於避免它們固有的跨指令碼漏洞。在一般的瀏覽器安全性中,指令碼應該保持所有 XHR 請求只能由提供相同指令碼的源提供。如果 XHR 請求是在指令碼所屬的域之外發出的,則響應將被拒絕。

但是,如果瀏覽器支援 CORS,則如果響應中的適當標頭指示允許發出請求的域,則會對此規則作出例外。以下標頭表示允許任何域:

Access-Control-Allow-Origin: *

以下示例顯示了 Express 中介軟體如何在其響應中包含這些標頭。

app.use(function(request, response, next){

    response.header('Access-Control-Allow-Origin', '*');
    response.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    response.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');

   //Handle Preflight 
   if (reqest.method === 'OPTIONS') {
      response.status(200).send();        
   }
   else {
      next();
   }

});

處理預檢

上面例子的後半部分處理 Preflight。如果請求包含自定義標頭,則預檢是瀏覽器傳送到測試 CORS 的特殊 OPTIONS 請求。

有用的參考資料

MDN - CORS Http 教程