'Access-Control-Allow-Origin'标头包含多个值

 手机用户2602922857 发布于 2023-01-18 16:15

我在客户端使用AngularJS $ http访问服务器端ASP.NET Web API应用程序的端点.由于客户端作为服务器托管在不同的域上,因此我需要CORS.它适用于$ http.post(url,data).但是只要我通过$ http.get(url)对用户进行身份验证并发出请求,我就会收到消息

The 'Access-Control-Allow-Origin' header contains multiple values 'http://127.0.0.1:9000, http://127.0.0.1:9000', but only one is allowed. Origin 'http://127.0.0.1:9000' is therefore not allowed access.

Fiddler告诉我,在成功的选项请求之后,get请求中确实有两个头条目.我做错什么地方在哪里?

更新

当我使用jQuery $ .get而不是$ http.get时,会出现相同的错误消息.所以AngularJS似乎没有问题.但哪里错了?

6 个回答
  • 我们就遇到了这个问题,因为我们已经根据最佳实践建立CORS(如http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api)AND ALSO <add name="Access-Control-Allow-Origin" value="*"/>在web.config中有一个自定义标题.

    删除web.config条目,一切都很好.

    与@ mww的答案相反,我们仍然EnableCors()在WebApiConfig.cs和EnableCorsAttribute控制器上.当我们拿出一个或另一个时,我们遇到了其他问题.

    2023-01-18 16:16 回答
  • 我补充道

    config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))

    以及

    app.UseCors(CorsOptions.AllowAll);

    在服务器上.这导致两个标题条目.只需使用后者即可.

    2023-01-18 16:16 回答
  • 我正在使用Cors 5.1.0.0,经过多次头痛,我发现问题是从服务器复制Access-Control-Allow-Origin和Access-Control-Allow-Header头

    config.EnableCors()从WebApiConfig.cs文件中删除,只需[EnableCors("*","*","*")]在Controller类上设置属性即可

    查看此文章了解更多详细信息.

    2023-01-18 16:16 回答
  • 实际上你不能设置多个标题Access-Control-Allow-Origin(或者至少它不适用于所有浏览器).相反,您可以有条件地设置环境变量,然后在Header指令中使用它:

    SetEnvIf Origin "^(https?://localhost|https://[a-z]+\.my\.base\.domain)$" ORIGIN_SUB_DOMAIN=$1
    Header set Access-Control-Allow-Origin: "%{ORIGIN_SUB_DOMAIN}e" env=ORIGIN_SUB_DOMAIN
    

    因此,在此示例中,仅当请求标头Origin与RegExp匹配时才会添加响应标头:( ^(https?://localhost|https://[a-z]+\.my\.base\.domain)$它基本上表示通过HTTP或HTTPS的本地主机和基于HTTPS的*.my.base.domain).

    记得启用setenvif模块.

    文档:

    http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif

    http://httpd.apache.org/docs/2.2/mod/mod_headers.html#header

    BTW.在}e%{ORIGIN_SUB_DOMAIN}e是不是一个错字.这是你在Header指令中使用环境变量的方式.

    2023-01-18 16:16 回答
  • Apache服务器:

    我花了同样的钱,但那是因为我的文件中没有引号(")星号提供了对服务器的访问,例如'.htaccess.':

    Header add Access-Control-Allow-Origin: * 
    Header add Access-Control-Allow-Origin "*" 
    

    你也可能在另一个'.htaccess'文件夹中有一个'.htaccess'文件,例如

    / 
    - .htaccess 
    - public_html / .htaccess (problem here)
    

    在您的情况下,而不是'*'星号将是http://127.0.0.1:9000您提供服务数据的权限的ip()服务器.

    ASP.NET:

    检查代码中是否存在"Access-Control-Allow-Origin"副本.

    开发者工具:

    使用Chrome,您可以验证您的请求标头.按F12键并转到"网络"选项卡,现在运行AJAX请求并显示在列表中,单击并提供所有信息.

    Access-Control-Allow-Origin:*

    2023-01-18 16:16 回答
  • 我既有OWIN也有我的WebAPI,两者显然都需要单独启用CORS,这反过来又会产生'Access-Control-Allow-Origin' header contains multiple values错误.

    我最终删除了启用CORS的所有代码,然后将以下内容添加到system.webServer我的Web.Config节点:

    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="https://stethio.azurewebsites.net" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
        <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Authorization" />
      </customHeaders>
    </httpProtocol>
    

    为OWIN(允许登录)和WebAPI(允许API调用)执行此满足的CORS要求,但它创建了一个新问题:OPTIONS在我的API调用的预检期间找不到方法.解决这个问题很简单 - 我只需要从handlers我的Web.Config节点中删除以下内容:

    <remove name="OPTIONSVerbHandler" />
    

    希望这有助于某人.

    2023-01-18 16:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有