asp.net Firefox不支持Control-Allow-Origin,但支持Chrome和Safari

mfpqipee  于 5个月前  发布在  .NET
关注(0)|答案(5)|浏览(73)

我试图启用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

bn31dyow

bn31dyow1#

你认为你可能有这个问题Firefox CORS request giving 'Cross-Origin Request Blocked' despite headers
Firefox使用的证书存储与Chrome/IO不同,你可以在工具->选项->高级下检查证书,然后你有一个按钮来查看证书存储。

mznpcxlj

mznpcxlj2#

我也遇到了同样的问题,新的Firefox - 45.0.0版本似乎修复了bug。尝试更新并再次检查。我会向用户解释问题并指导他们进行升级。

lg40wkob

lg40wkob3#

我遇到了一个PHP脚本的问题,该脚本将检查'Origin'请求头,并在匹配预期的情况下添加'Excell-Control-Allow-Origin'响应头。
最后的问题是,firefox发送的头文件是 *'origin'(全是小写),而我的脚本正在寻找标准的头文件 *'Origin'(大小写混合)。
修正是为所有的“origin”请求头添加一个处理程序。

8i9zcol2

8i9zcol24#

对我有效的是禁用Firefox的跟踪保护选项。

nhhxz33t

nhhxz33t5#

您可以尝试禁用浏览器的所有扩展和(扩展在私人浏览器中启用)

相关问题