在服务器端的 IIS 上使用 PHP 并在客户端使用 Angular 4 时出现 CORS 错误
Posted
技术标签:
【中文标题】在服务器端的 IIS 上使用 PHP 并在客户端使用 Angular 4 时出现 CORS 错误【英文标题】:CORS error when using PHP on IIS on server side and angular 4 on client side 【发布时间】:2018-05-18 08:00:53 【问题描述】:我有 2 个网站在我的服务器端与 REST API 进行通信。 主网站有主域,第二个网站有子域。 例如 www.example.com 和 www.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 问题,甚至是客户端问题?
谢谢
【问题讨论】:
blogs.iis.net/iisteam/introducing-iis-cors-1-0Microsoft 引入了一个新的 OOB 模块供您配置 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
【讨论】:
以上是关于在服务器端的 IIS 上使用 PHP 并在客户端使用 Angular 4 时出现 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章