我有2个网站在我的服务器端与REST API进行通信。 主网站具有主域,第二网站具有子域。 例如 www.example.com 和 www.admin.example.com
我在 www.example.com 根目录上有一个REST API,当 www.example.com 地址到API时,一切正常,但是当< strong> www.admin.example.com 正试图解决API,我收到错误:
对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。起源&#39; http://admin.example.com&#39;因此不允许访问。
我在 RestController.php 文件中有这个PHP代码行:
header("Access-Control-Allow-Origin: *");
我还尝试在 web.config 中添加以下代码:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" />
<add name="Access-Control-Max-Age" value="1000" />
</customHeaders>
</httpProtocol>
</system.webServer>
但仍然可以获得 No&#39; Access-Control-Allow-Origin&#39; 标题错误,或错误&#34;&#39;访问控制 - 允许来源&#39;标题包含多个值&#39; *,*,但只允许一个。&#34;
我不知道它是否重要,但我们正在使用 Angular 4 作为客户端。
有没有人知道问题是什么,是IIS问题还是PHP问题,甚至是客户端问题?
谢谢
答案 0 :(得分:2)
以前,您必须编写自己的代码或其他黑客方法,但现在Microsoft发布了一个名为IIS CORS Module的官方IIS扩展。
安装后可以轻松配置CORS响应。
答案 1 :(得分:0)
首先,您应该将Access-Control-Allow-Origin设置在一个位置。我建议你在php控制器中这样做。否则你可能会遇到&#34;访问控制 - 允许 - 来源&#39;标题包含多个值&#39; *,*,但只允许一个。&#34;
第二,如果您正在执行GET请求,一切正常,但如果您正在执行POST请求,则可能会遇到&#34;对预检请求的响应未通过访问控制检查。&#34; 。原因是您的浏览器发送了OPTIONS预检请求。
:您必须在服务器端处理此请求(就像您发布帖子一样)。您可以在此处详细了解预检请求:https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request
此外,您可以在此主题中找到更多信息:CORS with php headers