无法重写 Access_Control_Allow_Origin
Posted
技术标签:
【中文标题】无法重写 Access_Control_Allow_Origin【英文标题】:Can't rewrite Access_Control_Allow_Origin 【发布时间】:2018-05-15 09:53:33 【问题描述】:我有一个网站可以像我的其他网站的 CDN 一样工作。
我在 Web.config 中添加了以下内容
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" />
<add name="Arr-Disable-Session-Affinity" value="True" />
</customHeaders>
</httpProtocol>
<rewrite>
<outboundRules>
<clear />
<rule name="AddCrossDomainHeader">
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="HTTP_ORIGIN" pattern="(http(s)?://((.+\.)?[a-zA-Z0-9-]*\.ap\.dk|(.+\.)?localhost\:[0-9]*))" />
</conditions>
<action type="Rewrite" value="C:0" />
</rule>
</outboundRules>
</rewrite>
Access-control-allow-origin with multiple domainsAccess-control-allow-origin with multiple domains 中的答案 #2 启发了我
但 Access_Control_Allow_Origin 的重写仅适用于 localhost。在现场,它没有被重写,然后我收到这样的错误:
无法加载https://aptestlogin.ap.dk//Widgets/Footer.html:“Access-Control-Allow-Origin”标头的值“https://aptestproject.ap.dk”不等于提供的来源。 Origin 'https://aptestcompany.ap.dk' 因此不允许访问
为了加载这个“Footer.html”,我必须清除浏览器中的缓存,如果我打开另一个需要它的网站,请重复此操作。
【问题讨论】:
IIS 是直接在 live 上工作还是通过代理湖 nginx 工作? 【参考方案1】:你可以这样试试
安装包 Microsoft.AspNet.WebApi.Cors
打开文件 App_Start/WebApiConfig.cs。
public static void Register(HttpConfiguration config)
config.EnableCors(); //add this
【讨论】:
【参考方案2】:尝试检查正则表达式模式。也许正斜杠未转义 // 或其他。
https?:\/\/((.+\.)?[a-zA-Z0-9-]*\.ap\.dk|(.+\.)?localhost(\:[0-9]*)?)
【讨论】:
【参考方案3】:https://enable-cors.org/server_aspnet.html
以上将为您的问题提供解决方案。
【讨论】:
【参考方案4】:改变
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
到
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern="*" />
【讨论】:
【参考方案5】:如果您在 Visual Studio 中工作,请从包管理器或 Nuget 包管理器(如果有)安装 Microsoft.AspNet.WebApi.Cors。
打开文件 App_Start/WebApiConfig.cs。将以下代码添加到 WebApiConfig.Register 方法中。
using System.Web.Http;
namespace WebService
public static class WebApiConfig
public static void Register(HttpConfiguration config)
// New code
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
如果您想了解有关此跨源资源共享 (CORS) 的更多信息,请参阅此处https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api 或在 Youtube 中搜索,您会得到很多关于它的视频。
>【讨论】:
以上是关于无法重写 Access_Control_Allow_Origin的主要内容,如果未能解决你的问题,请参考以下文章