【问题标题】:CORS error when using PHP on IIS on server side and angular 4 on client side在服务器端的 IIS 上使用 PHP 并在客户端使用 Angular 4 时出现 CORS 错误
【发布时间】:2018-05-18 08:00:53
【问题描述】:

我有 2 个网站在我的服务器端与 REST API 进行通信。 主网站有主域,第二个网站有子域。 例如 www.example.comwww.admin.example.com

我在 www.example.com 根目录上有一个 REST API,当 API 的 www.example.com 地址一切正常,但当 www.example.com strong>www.admin.example.com 正在尝试访问 API,我收到一个错误:

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://admin.example.com' 因此不允许访问。

我的 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 'Access-Control-Allow-Origin' 标头错误,或错误“'Access-Control-Allow-Origin'标头包含多个值'*, *,但只允许一个。”

我不知道这是否重要,但我们在客户端使用 Angular 4

有谁知道问题出在哪里,是 IIS 问题还是 PHP 问题,甚至是客户端问题?

谢谢

【问题讨论】:

标签: php angular iis cors


【解决方案1】:

以前您必须编写自己的代码或其他黑客方法,但现在 Microsoft 提供了一个官方 IIS 扩展,称为 IIS CORS Module

您可以在安装后轻松配置 CORS 响应。

【讨论】:

    【解决方案2】:

    首先,您应该在一个地方设置 Access-Control-Allow-Origin。我建议在您的 php 控制器中执行此操作。否则,您可能会遇到“'Access-Control-Allow-Origin' 标头包含多个值 '*、*,但只允许一个值。”

    其次,如果您正在执行 GET 请求,一切正常,但如果您正在执行 POST 请求,您可能会遇到“对预检请求的响应未通过访问控制检查..”。原因是您的浏览器发送了一个 OPTIONS 预检请求。您必须在服务器端处理此请求(就像您发帖一样)才能被允许和处理。

    您可以在此处阅读有关预检请求的更多信息:https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request

    您可以在此线程中找到更多信息:CORS with php headers

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2021-01-08
      相关资源
      最近更新 更多