跨源资源共享(CORS)是一种机制,它允许Web应用在不同的源之间进行通信。简单来说,当你的Web应用尝试从不同的源(例如,不同的域名、协议或端口)请求数据时,浏览器会阻止这些请求,除非服务器明确允许。

CORS 基本概念

  • 简单请求:不涉及自定义头部、POST请求、文件上传等操作。
  • 预检请求:浏览器在发起简单请求之前,会先发送一个预检请求(OPTIONS),以确定服务器是否允许跨源请求。
  • 响应头部:服务器需要返回特定的响应头部,以允许或拒绝跨源请求。

CORS 配置

服务器可以通过设置HTTP响应头部来控制CORS:

  • Access-Control-Allow-Origin:指定允许的源。
  • Access-Control-Allow-Methods:指定允许的HTTP方法。
  • Access-Control-Allow-Headers:指定允许的头部。

示例

假设我们有一个API端点 /api/data,我们可以这样配置CORS:

app.get('/api/data', (req, res) => {
  res.header('Access-Control-Allow-Origin', 'https://example.com');
  res.header('Access-Control-Allow-Methods', 'GET, POST');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.send('Data');
});

扩展阅读

更多关于CORS的信息,可以参考MDN Web Docs


CORS 图解