https://api.aonesalons.com/dbsynch/webocitysalonpos/
当我从POSTMAN向所提到的URL发送请求时,它可以正常工作。
然而,当通过我的角应用程序发送时,在demo.aonesalons.com上运行,
我明白了:
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.aonesalons.com上运行的角度应用程序访问相同的URL时,它会抛出多个CORS头错误
在角度应用程序中或直接在浏览器中点击它时,我看到此请求的响应为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
现在,
将其切换到之后,所有响应头都有Access-Control-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>
答案 0 :(得分:6)
如错误消息中所述:
The 'Access-Control-Allow-Origin' header contains multiple values '*, https://demo.aonesalons.com', but only one is allowed
HTTP响应中只允许一个Access-Control-Allow-Origin
条目。现在,由于您使用的是ProxyPass
,因此目标应用程序极有可能为您的Apache服务器转发创建它自己的Access-Control-Allow-Origin
标头条目 - 除此之外,它还添加了包含*
的条目,因为您在配置中指定了此条目。
所以我想在你的Angular应用程序中你有类似.header("Access-Control-Allow-Origin","(something)")
的东西;如果删除它,您的应用程序应该可以通过Apache服务器访问。
或者,您可以删除apache配置中的条目Header always set Access-Control-Allow-Origin "*"
,并以设置正确标头的方式更改Angular应用程序。
答案 1 :(得分:0)
您需要在apache配置文件上启用CORS。 只需将他的行添加到启用站点的文件夹配置文件中 标题设置了Access-Control-Allow-Origin&#34; https://domain_name.com&#34;