在服务器端的IIS和客户端的角度4上使用PHP时出现CORS错误

时间:2017-12-04 19:15:56

标签: php angular iis cors

我有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问题,甚至是客户端问题?

谢谢

2 个答案:

答案 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