适用于: ✔️ Front Door 标准版 ✔️ Front Door 高级版
CORS(跨源资源共享)是一种HTTP功能,使在一个域下运行的Web应用程序能够访问另一个域的资源。 为了减少跨站脚本攻击的可能性,所有现代网页浏览器都实现了一种称为 同源策略的安全限制。 此项限制可以防止网页调用其他域中的 API。 CORS 提供了一种安全方式,允许一个源(源域)调用另一个源中的 API。
工作原理
CORS 请求分为两种类型: 简单请求 和 复杂请求。
简单请求:
浏览器发送 CORS 请求时,会附带另一个 Origin HTTP 请求头。 该标头的值是为父页面提供服务的源,其定义为 协议、域 和 端口。 当来自
https://www.contoso.com的页面尝试访问fabrikam.com源中的用户数据时,以下请求标头会发送到fabrikam.com:Origin: https://www.contoso.com服务器可能返回以下任一响应:
响应中含有 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
你可以在规则中添加更多动作,修改其他响应头部,如 访问-控制-允许-方法。