代码之家  ›  专栏  ›  技术社区  ›  systemdebt

apache的“Access Control Allow Origin”标头

  •  2
  • systemdebt  · 技术社区  · 8 年前
    https://api.aonesalons.com/dbsynch/webocitysalonpos/
    

    当我从邮递员那里向上面提到的URL发送请求时,效果很好。

    然而,当通过我的angular应用程序发送时,在演示中运行。aonesalons。通用域名格式,

    我得到:

    Failed to load https://api.aonesalons.com/dbsynch/webocitysalonpos/: The 'Access-Control-Allow-Origin' header contains multiple values '*, https://demo.aonesalons.com', but only one is allowed. Origin 'https://demo.aonesalons.com' is therefore not allowed access.
    

    如果我直接击中 https://api.aonesalons.com/dbsynch/webocitysalonpos/in 浏览器,它可以工作。然而,当从demo上运行的angular应用程序访问相同的url时。aonesalons。com,它抛出多个CORS标头错误

    在angular应用程序中或在浏览器中直接点击时,我看到此请求的响应为200,响应如下:

    Access-Control-Allow-Credentials:true
    Access-Control-Allow-Headers:*
    Access-Control-Allow-Origin:*
    Access-Control-Allow-Origin:https://demo.aonesalons.com
    Access-Control-Expose-Headers:Cache-Control, Content-Type, Server
    Cache-Control:must-revalidate, max-age=172800
    Connection:close
    Content-Length:240
    Content-Type:application/json
    Date:Sun, 25 Feb 2018 05:02:27 GMT
    Expires:Tue, 27 Feb 2018 05:02:27 GMT
    Server:CouchDB/1.6.1 (Erlang OTP/R14B04)
    

    当我遇到邮差时,

    access-control-allow-headers →*
    access-control-allow-origin →*
    cache-control →must-revalidate, max-age=172800
    connection →close
    content-length →240
    content-type →text/plain; charset=utf-8
    date →Sun, 25 Feb 2018 05:11:50 GMT
    expires →Tue, 27 Feb 2018 05:11:50 GMT
    server →CouchDB/1.6.1 (Erlang OTP/R14B04)
    

    我的所有请求都通过apache服务器代理,该服务器具有

    访问控制允许原点:*

    但是

    在提出*之前,我

    #SetEnvIf Origin ^(https?://(?:.+\.)?aonesalons\.com(?::\d{1,5})?)$   CORS_ALLOW_ORIGIN=$1
    #Header append Access-Control-Allow-Origin  %{CORS_ALLOW_ORIGIN}e   env=CORS_ALLOW_ORIGIN
    

    现在

    切换到之后 ,所有响应标头都具有访问控制允许来源: 除了这个对couchdb的请求。我不知道它是从哪里挑选的。

    下面是我的ssl。conf看起来像:

    Header always set Access-Control-Allow-Headers "*"
    Header always set Access-Control-Allow-Origin "*"
    
    <VirtualHost *:443>
        ServerName api.aonesalons.com
        SSLEngine on
        SSLCertificateFile /home/user/abc.crt
        SSLCertificateKeyFile /home/user/bcf.key
    
            ProxyPreserveHost On
            ProxyRequests Off
        ProxyPass /dbsynch http://0.0.0.0:5984/
        ProxyPassReverse /dbsynch http://0.0.0.0:5984/
        ProxyPass / http://localhost:9999/
        ProxyPassReverse / http://localhost:9999/
    </VirtualHost>
    
    2 回复  |  直到 8 年前
        1
  •  6
  •   Philipp Ludwig    8 年前

    如错误消息中所述:

    The 'Access-Control-Allow-Origin' header contains multiple values '*, https://demo.aonesalons.com', but only one is allowed
    

    只有一个条目 Access-Control-Allow-Origin 在HTTP响应中允许。现在,由于您正在使用 ProxyPass ,目标应用程序很可能会为 访问控制允许原点 ,您的Apache服务器将其转发-除此之外,它还添加了包含 * ,因为您在配置中指定了此选项。

    所以我猜在你的Angular应用程序中 .header("Access-Control-Allow-Origin","(something)") ; 如果删除此项,则应用程序应该可以通过Apache服务器访问。

    或者,您可以删除条目 Header always set Access-Control-Allow-Origin "*" 在apache配置中,以设置正确标题的方式更改Angular应用程序。

        2
  •  0
  •   Rahul Sharma    8 年前

    您需要在apache配置文件上启用CORS。 只需将他的行添加到站点启用的文件夹配置文件中 标题集访问控制允许原点“ https://domain_name.com "

    推荐文章