为 Azure 容器应用配置跨源资源共享 (CORS)

本文介绍如何在一个域中运行的容器应用中启用和配置 CORS,以便从不同域中的服务器访问资源。 默认情况下,作为一种安全措施,浏览器会阻止此类跨源请求。 如果需要允许托管在不同域上的客户端应用程序访问容器应用,可以将 CORS 配置为显式允许这些请求。

启用 CORS 时,可以配置以下设置:

设置 说明
允许凭据 指示是否返回 Access-Control-Allow-Credentials 标头。
最长时间 配置 Access-Control-Max-Age 响应标头,以指示 CORS 预检请求的结果可以缓存多长时间(以秒为单位)。
允许的域 允许跨源请求的源列表(例如 https://www.contoso.com)。 控制 Access-Control-Allow-Origin 响应标头。 使用 * 允许所有内容。
允许的方法 跨源请求中允许的 HTTP 请求方法列表。 控制 Access-Control-Allow-Methods 响应标头。 使用 * 允许所有内容。
允许的标题 跨源请求中允许的标头列表。 控制 Access-Control-Allow-Headers 响应标头。 使用 * 允许所有内容。
公开标头 默认情况下,并非所有响应标头都会在跨源请求中向客户端 JavaScript 代码公开。 公开的标头是服务器可以在响应中包括的额外标头。 控制 Access-Control-Expose-Headers 响应标头。 使用 * 公开所有内容。
属性 说明 类型
allowCredentials 指示是否返回 Access-Control-Allow-Credentials 标头。 布尔
maxAge 配置 Access-Control-Max-Age 响应标头,以指示 CORS 预检请求的结果可以缓存多长时间(以秒为单位)。 整数
allowedOrigins 允许跨源请求的源列表(例如 https://www.contoso.com)。 控制 Access-Control-Allow-Origin 响应标头。 使用 * 允许所有内容。 字符串数组
allowedMethods 跨源请求中允许的 HTTP 请求方法列表。 控制 Access-Control-Allow-Methods 响应标头。 使用 * 允许所有内容。 字符串数组
allowedHeaders 跨源请求中允许的标头列表。 控制 Access-Control-Allow-Headers 响应标头。 使用 * 允许所有内容。 字符串数组
exposeHeaders 默认情况下,并非所有响应标头都会在跨源请求中向客户端 JavaScript 代码公开。 公开的标头是服务器可以在响应中包括的额外标头。 控制 Access-Control-Expose-Headers 响应标头。 使用 * 公开所有内容。 字符串数组

有关详细信息,请参阅有关来自提取请求的有效 HTTP 响应的 Web 超文本应用程序技术工作组 (WHATWG) 参考。

启用和配置 CORS

  1. 在 Azure 门户中转到你的容器应用。

  2. 从“设置”菜单中的“网络”下,选择“ CORS”

    屏幕截图显示如何在 Azure 门户中启用 CORS。

启用 CORS 后,可以为“允许的源”、“允许的方法”、“允许的标头”和“公开标头”添加、编辑和删除值。

若要允许方法、标头或源的任何可接受值,请输入 * 作为值。

注意

通过命令行更新配置设置会覆盖当前设置。 请确保将当前设置合并到要设置的任何新 CORS 值中,以确保配置保持一致。

以下代码表示配置容器应用时 CORS 设置在 ARM 模板中采用的形式。

{ 
  ... 
  "properties": { 
      ... 
      "configuration": { 
         ... 
          "ingress": { 
              ... 
              "corsPolicy": { 
                "allowCredentials": true,
                "maxAge": 5000,
                "allowedOrigins": ["https://example.com"], 
                "allowedMethods": ["GET","POST"], 
                "allowedHeaders": [], 
                "exposeHeaders": []
              } 
          } 
      } 
  } 
}

后续步骤