首页 > 解决方案 > CORS 策略“访问控制允许来源”IIS

问题描述

我有角度、实体框架和 MS SQL 服务器。我需要在 MS IIS 上设置后端,因为我需要进行域身份验证。不幸的是,我仍然遇到 CORS 问题。

当我在我的 web.config 文件中有:

<httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="http://localhost" />
            <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
        </customHeaders>
      </httpProtocol>

我进入浏览器:“已被 CORS 策略阻止:‘Access-Control-Allow-Origin’标头的值‘ http://localhost ’不等于提供的来源”

当我将其更改为:

<httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
        </customHeaders>
      </httpProtocol>

我得到:“已被 CORS 策略阻止:当请求的凭据模式为 'include' 时,响应中的 'Access-Control-Allow-Origin' 标头的值不能是通配符 '*'。凭据模式XMLHttpRequest 发起的请求由 withCredentials 属性控制。”

知道我应该改变什么吗?

接下来的变化:

<httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="" />
            <add name="Access-Control-Allow-Credentials" value="true" />
            <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
        </customHeaders>
      </httpProtocol>

浏览器错误:“已被 CORS 策略阻止:'Access-Control-Allow-Origin' 标头包含无效值 'true'。”

在提琴手我可以看到:安全访问控制允许来源:真

看起来这些值没有被添加到给定的标题中。

下一个更改:我为 IIS 安装了 CORS 模块,文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <cors enabled="true" failUnlistedOrigins="true">
            <add origin="http://localhost:4200"
                 allowCredentials="true"
                 maxAge="120"> 
                <allowHeaders allowAllRequestedHeaders="true">
                    <add header="header1" />
                </allowHeaders>
                <allowMethods>
                     <add method="GET, POST" />
                </allowMethods>
            </add>
        </cors>
    </system.webServer>
</configuration>

现在浏览器中的答案是:“HTTP Error 404.0 - Not Found 您要查找的资源已被删除、更改名称或暂时不可用。”现在好些了吗?下一步可能是什么?

标签: angulariiscors

解决方案


如果您的localhost服务器在特定端口上运行,则它必须包含在 中Access-Control-Allow-Origin,例如http://localhost:8080.

在浏览器开发者工具 > 网络中检查请求标头并验证Referer. 这是应该为 设置的 URL Access-Control-Allow-Origin

开发者工具 > 网络

开发人员工具 > 网络:请求标头

配置

<add name="Access-Control-Allow-Origin" value="http://localhost:8080" />

此外,您可能需要设置Access-Control-Allow-Credentials.

<add name="Access-Control-Allow-Credentials" value="true" />

推荐阅读