CORS 政策问题刚刚开始,没有代码更改 - "CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values"

CORS policy issue just started with no code changes - "CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values"

大家好,我遇到了一个奇怪的 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 开发工具中的响应 header 中的多个(重复)值是:

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、负载平衡器或网络。我主要编写代码,所以我很难追踪到这一点。我已经和一些基础架构团队成员讨论过了,但我们仍然没有弄清楚。

有什么想法吗??谢谢!

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

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;
        }
    }

找到了;固定它!我希望这可以帮助将来的人...

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