使用 Azure Front Door 标准/高级版,支持跨源资源共享(CORS)

适用于: ✔️ Front Door 标准版 ✔️ Front Door 高级版

CORS(跨源资源共享)是一种HTTP功能,使在一个域下运行的Web应用程序能够访问另一个域的资源。 为了减少跨站脚本攻击的可能性,所有现代网页浏览器都实现了一种称为 同源策略的安全限制。 此项限制可以防止网页调用其他域中的 API。 CORS 提供了一种安全方式,允许一个源(源域)调用另一个源中的 API。

工作原理

CORS 请求分为两种类型: 简单请求复杂请求

简单请求:

  1. 浏览器发送 CORS 请求时,会附带另一个 Origin HTTP 请求头。 该标头的值是为父页面提供服务的源,其定义为 协议、端口。 当来自 https://www.contoso.com 的页面尝试访问 fabrikam.com 源中的用户数据时,以下请求标头会发送到 fabrikam.com

    Origin: https://www.contoso.com

  2. 服务器可能返回以下任一响应:

    • 响应中含有 Access-Control-Allow-Origin 标头,指示允许使用哪个源站点。 例如:

      Access-Control-Allow-Origin: https://www.contoso.com

    • 如果服务器在检查源标头之后不允许跨源请求,则会显示 HTTP 错误代码(如 403)

    • 带有通配符的 Access-Control-Allow-Origin 标头,允许所有源:

      Access-Control-Allow-Origin: *

对于复杂请求

复杂请求是一种 CORS 请求,浏览器必须先发送 一次预检请求 (即初步探针),然后再发送实际的 CORS 请求。 印前检查请求请求服务器是否允许继续执行原始的 CORS 请求。 这是一个发送到同一 URL 的 OPTIONS 请求。

Tip

有关CORS流程和常见陷阱的更多细节,请参阅 《REST API的CORS指南》。

通配符或单个源场景

访问控制允许起源头设置为通配符(*)或单一源头时,Azure Front Door 上的 CORS 会自动工作,无需额外配置。 Azure Front Door 缓存第一个响应,后续请求使用相同的报头。

如果你在 Origin 设置 CORS 之前向 Azure Front Door 发送请求,你需要在端点上清除内容,重新加载带有 Access-Control-Allow-Origin 头部的内容。

多重起源情景

如果你需要为 CORS 允许特定的来源列表,事情就会变得稍微复杂一些。 当 CDN 缓存第一个 CORS 源的 Access-Control-Allow-Origin 标头时,就会出现该问题。 当不同的 CORS 源发起另一个请求时,CDN 会返回缓存的 Access-Control-Allow-Origin 标头,而该标头与当前请求不匹配。 有多种方法可以解决这个问题。

Azure Front Door 规则集

在 Azure Front Door 上,你可以在 Azure Front Door 规则设置中创建规则,检查请求中的 Origin 头。 如果它是有效的源,你的规则会将 Access-Control-Allow-Origin 标头设置为正确的值。 在这种情况下,来自文件源站服务器的 Access-Control-Allow-Origin 标头会被忽略,而允许的 CORS 源将完全由 Azure Front Door 规则引擎管理。

带有规则集的规则示例截图。

Tip

你可以在规则中添加更多动作,修改其他响应头部,如 访问-控制-允许-方法

后续步骤