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 教程