如何通过 web.config 文件中的 Access-Control-Allow-Origin 允许多个源域?

Posted

技术标签:

【中文标题】如何通过 web.config 文件中的 Access-Control-Allow-Origin 允许多个源域?【英文标题】:How to allow multiple origin domains by Access-Control-Allow-Origin in web.config file? 【发布时间】:2014-09-07 20:04:35 【问题描述】:

在 web.config 文件中是否允许使用 Access-Control-Allow-Origin 的多个跨域?

目前我使用* 来同时允许多个域。

<add name="Access-Control-Allow-Origin" value="*" />

但我不想使用*,因为它对所有域开放,我只想允许某些特定域。

那么,无论如何,使用 web.config 文件中的 Access-Control-Allow-Origin 是否允许多个跨域?

我找到了一些相关的帖子:

Access-control-allow-origin with multiple domains Access-Control-Allow-Origin Multiple Origin Domains?

我已经尝试获取请求标头来验证请求来源(如帖子 1 中的建议),但没有成功。因为我使用的是 iframe 元素,所以当我尝试获取请求标头时,它会提供 iframe 的来源(域)。但是这里我想要原始(父窗口)原点(域)。

【问题讨论】:

docs.microsoft.com/en-us/iis/extensions/cors-module/…微软几年后提供了一个IIS模块。 【参考方案1】:

我认为第一种方法应该可行,但让我们仔细看看iframe 问题

是否可以获得 iframe 父文档?是的,这是可能的。

如果您检查 this ,您会发现 document.referrer 应该在您的 iframe 中工作。

因此第一个解决方案应该是有效的。

【讨论】:

【参考方案2】:

对于 IIS 7.5+,您可以使用 IIS CORS 模块:https://www.iis.net/downloads/microsoft/iis-cors-module

您的 web.config 应该是这样的,替换您的域的 [origin_#]:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <cors enabled="true" failUnlistedOrigins="true">
            <add origin="[origin_1]">
                <allowMethods>                    
                    <add method="GET" />
                    <add method="HEAD" />
                    <add method="POST" />
                    <add method="PUT" /> 
                    <add method="DELETE" /> 
                </allowMethods>
            </add>
            <add origin="[origin_2]">
                <allowMethods>
                    <add method="GET" />
                    <add method="HEAD" />
                    <add method="POST" />
                    <add method="PUT" /> 
                    <add method="DELETE" /> 
                </allowMethods>
            </add>
        </cors>
    </system.webServer>
</configuration>

您可以在这里找到配置参考:https://docs.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference

【讨论】:

以上是关于如何通过 web.config 文件中的 Access-Control-Allow-Origin 允许多个源域?的主要内容,如果未能解决你的问题,请参考以下文章

如何转换任何配置文件 文件中的内容

web.config配置文件中的configSource属性

如何阅读web.config文件中的appSettings部分?

ASP.NET MVC 4中如何读取web.config中的配置

如何设置 web.config 文件以显示完整的错误消息

通过Web.config中的configSections配置自己系统的全局常量