CORS 政策问题刚刚开始,没有代码更改 - “CORS 政策:'Access-Control-Allow-Origin' 标头包含多个值”

Posted

技术标签:

【中文标题】CORS 政策问题刚刚开始,没有代码更改 - “CORS 政策:\'Access-Control-Allow-Origin\' 标头包含多个值”【英文标题】:CORS policy issue just started with no code changes - "CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values"CORS 政策问题刚刚开始,没有代码更改 - “CORS 政策:'Access-Control-Allow-Origin' 标头包含多个值” 【发布时间】:2020-05-23 20:14:42 【问题描述】:

大家好,我遇到了一个奇怪的 CORS 政策问题...我想知道是否有人见过这样的事情以及我应该如何解决这个问题???

以下是 CORS 问题:

Access to XMLHttpRequest at 'https://myservice.dev.mycompany.com/api/SSO/SSOProfile' from origin 'https://myapp.dev.mycompany.com' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'https://myapp.dev.mycompany.com, https://myapp.dev.mycompany.com', but only one is allowed.

Chrome 开发工具中响应头中的多个(重复)值是:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://myapp.dev.mycompany.com
Access-Control-Allow-Origin: https://myapp.dev.mycompany.com

我们为 cors 属性启用的来源是 https://myotherapp.dev.mycompany.com,https://myapp.dev.mycompany.com 在这种情况下,“myotherapp”不相关,因为我们只是尝试登录,而“myotherapp”用于较少使用的功能。

这就是奇怪的地方:

在上次运行和崩溃之间没有部署任何代码。 它只发生在我们的开发环境中。相同的代码库在本地运行良好,在测试、阶段和生产中运行良好。 我什至尝试重新部署、重新启动应用程序池并同时弹回(加载 平衡)开发服务器。 我不知道开发盒上有任何网络更改、服务器补丁或 IIS 更改。

这些情况让我相信这与代码无关,而是与环境有关——IIS、负载平衡器或网络相关。我主要是编码,所以我很难追踪到这个。我已经和几个基础架构团队成员一起解决了这个问题,但我们还没有弄清楚。

有什么想法吗??谢谢!

这是 WebApiConfig 类,我们没有在配置中定义 CORS 自定义标头,只是作为应用设置的来源(参见下面的代码)。就像我说的,这个错误在没有任何新代码部署的情况下弹出。

public static class WebApiConfig

    public static void Register(HttpConfiguration config)
    
        // Web API configuration and services
        /*
         *  from web.Dev.config
         *  <add key="corsAttribute" value="https://myotherapp.dev.mycompany.com,https://myapp.dev.mycompany.com" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
         */
        var cors = new EnableCorsAttribute(ConfigurationManager.AppSettings["corsAttribute"], "*", "*");
        cors.SupportsCredentials = true;
        config.EnableCors(cors);
        // Web API routes
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );
        config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Unspecified;
        
    

【问题讨论】:

能否把相关设置贴在web.config中?你使用 IIS Cors 设置吗? 为什么这被否决了? 【参考方案1】:

找到了;修复!我希望这可以帮助将来的人......

在 F5 负载平衡器上,有人将 dev.mycompany.com 添加到与 myapp.dev.mycompany.com 相同的 VIP。当他们这样做时,他们还添加了一个 irule 来说明允许来源,但我们的应用程序在代码/配置中这样做,所以有多个。他们放弃了规则,并将给 dev.mycompany.com 提供它自己的 VIP。做了好几天!!

【讨论】:

为什么这被否决了?我遇到了问题并找到了解决方案。

以上是关于CORS 政策问题刚刚开始,没有代码更改 - “CORS 政策:'Access-Control-Allow-Origin' 标头包含多个值”的主要内容,如果未能解决你的问题,请参考以下文章

CORS 政策已被阻止我的子域

被 CORS 政策阻止并没有解决! Laravel + Vuejs

React Cors 政策问题没有“访问控制允许来源”

CORS 开发政策阻止的所有请求

如何修复“评估已被 CORS 政策阻止:反应中没有“访问控制允许来源”

Firebase 函数的 CORS 政策问题