跨域资源共享 (CORS) 配置

跨域资源共享 (CORS) 通过 Access-Control-Allow-Origin 和相关标头进行处理。Access-Control-Allow-Origin 定义了允许向您域中的页面发出请求的非同源(non-same origins)。(即,通过 XMLHttpRequestfetch())。

问题

默认情况下,同源策略会阻止脚本发起的跨域 HTTP 请求。有几种用例需要跨域脚本访问;例如,提供 JavaScript/CSS 库托管的内容分发网络 (CDN) 和公共 API 端点。然而,跨域访问存在重大的安全风险,必须小心控制。

解决方案

使用 Access-Control-Allow-Origin 来定义允许向您域中的页面发出请求的非同源。

如果存在,Access-Control-Allow-Origin 应指定您的网站运行所需的最小数量的源和资源。例如,如果您的服务器既提供网站又提供供远程 XMLHttpRequest 访问的 API,则只有 API 资源应返回 Access-Control-Allow-Origin 标头。

未能正确设置 Access-Control-Allow-Origin 将允许未经授权的源读取您网站上任何页面的内容。如果这些网站能够发送凭证,这可能会使您的网站面临 CSRF 攻击,这是尤其危险的。

如果需要从特定源进行凭证访问,请确保 Access-Control-Allow-Origin 仅设置为这些源,而不是反映 Origin 标头。如果需要公共的非凭证访问,请将 Access-Control-Allow-Origin 设置为 * 并省略 Access-Control-Allow-Credentials 标头。否则,请省略这两个标头。

示例

允许任何站点读取 JavaScript 库的内容

http
Access-Control-Allow-Origin: *

注意: 子资源完整性需要此设置才能正常工作。

允许 https://random-dashboard.example.org 读取 API 的返回结果

http
Access-Control-Allow-Origin: https://random-dashboard.example.org

另见