我试图启用CORS,但我经常遇到同样的问题,每次从我的AngularJS Web应用程序发送请求:
跨域请求被阻止:同源策略不允许阅读https://.../上的远程资源.(原因:缺少CORS标头“控制-允许-起源”)。
而且只在Firefox上出现!它可以完美地与Chrome、Safari、IE和Edge配合使用。
环境:
我的API是托管在Azure App Services(IIS 8.0)上的.NET Web Api 2.3(.NET 4.6)。
我的前端应用程序是一个AngularJS网络应用程序,我通过https访问,并通过https使用API。
我做了什么:我有一个Startup类,它被声明为Owin的启动入口点。
[assembly: OwinStartup(typeof(Startup))]
namespace SentinelleApi
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.Map("/signalr", map =>
{
map.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true,
EnableJavaScriptProxies = false
};
map.RunSignalR(hubConfiguration);
});
HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
}
}
}
字符串
我有一个WebApiConfig类,声明如下:
namespace SentinelleApi
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// No need to declare config.EnableCors() here, the app.UseCors(...) does the job in startup section
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional}
);
}
}
}
型
我没有接触web.config来手动添加标题(我试过,但它没有解决我的问题)。无论如何,不建议在web.config中添加这些标题,同时使用app. applicationCors()。
所以,在Firefox上,我有CORS错误,但在Safari/Chrome上,没有问题!
除了Firefox之外,我在所有地方都有一个名为“控制-允许-起源”的命令。
在Chrome上:
x1c 0d1x的数据
在Firefox上:
的
**编辑:**好吧,我已经调查了一点,如果我把我的webapp地址从https://切换到http://,在Firefox上一切正常(而且,我的API可以通过https被Angular使用,根本没有CORS问题).
我真的不明白这是怎么回事,但神奇的是,Firefox使用的每个API路由上都出现了控制-允许-起源,当它是安全连接(https)时,情况并非如此。我依赖微软的https Azure证书,它似乎是有效的(锁图标是绿色)。
当然,我想保留https,但我不知道如何解决我的问题。
此分类上一篇:Firefox CORS request giving 'Cross-Origin Request Blocked' despite headers
我做了一个关于web应用程序客户端(托管AngularJS)的重写规则。在我的web.config中,我有:
<rule name="RedirectToHTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{URL}" pattern="/$" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="SeeOther" />
</rule>
型
当我删除它时,它很好(我的Web应用程序可以使用HTTP访问),但是当我切换到HTTPS时,即使API服务器接受所有源,它也会失败。
所以问题:我应该添加一些特殊的东西,使HTTPS/证书与CORS(在Firefox下)?
标签:https://stackoverflow.com/questions/33743645/iis-reverse-proxy-to-bypass-cors-issue
5条答案
按热度按时间bn31dyow1#
你认为你可能有这个问题Firefox CORS request giving 'Cross-Origin Request Blocked' despite headers
Firefox使用的证书存储与Chrome/IO不同,你可以在工具->选项->高级下检查证书,然后你有一个按钮来查看证书存储。
mznpcxlj2#
我也遇到了同样的问题,新的Firefox - 45.0.0版本似乎修复了bug。尝试更新并再次检查。我会向用户解释问题并指导他们进行升级。
lg40wkob3#
我遇到了一个PHP脚本的问题,该脚本将检查'Origin'请求头,并在匹配预期的情况下添加'Excell-Control-Allow-Origin'响应头。
最后的问题是,firefox发送的头文件是 *'origin'(全是小写),而我的脚本正在寻找标准的头文件 *'Origin'(大小写混合)。
修正是为所有的“origin”请求头添加一个处理程序。
8i9zcol24#
对我有效的是禁用Firefox的跟踪保护选项。
nhhxz33t5#
您可以尝试禁用浏览器的所有扩展和(扩展在私人浏览器中启用)