跨域请求在 Firefox 中被阻止
Posted
技术标签:
【中文标题】跨域请求在 Firefox 中被阻止【英文标题】:Cross Origin request blocked in Firefox 【发布时间】:2016-12-13 11:51:49 【问题描述】:我的 Angular JS 应用程序的跨源请求在 Chrome 中可以正常工作,但在 Firefox 中无法正常工作。
firefox 收到的错误是:
跨域请求被阻止:同源策略不允许读取 https://api.domain.eu/join/joinstatus 的远程资源。 (原因: CORS 标头“Access-Control-Allow-Origin”不匹配 'https://www.domain.eu, https://www.domain.eu')。
在我向请求添加Authorization
标头之前,我可以成功发出请求。
我的服务器(在 IIS 上运行的 ASP.Net Web API)设置了以下标头:
Access-Control-Allow-Origin: https://www.domain.eu
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Credentials: true
Firefox 使用 OPTIONS
请求成功地预检了请求。通过这个我可以看到发送的Origin
标头包含在返回的Access-Control-Allow-Origin
标头中。
事实上,由于某种原因,返回的Access-Control-Allow-Origin
标头有我的域名两次(尽管在配置中指定了一次)例如
Access-Control-Allow-Origin: https://www.domain.eu, https://www.domain.eu
除此之外,Firefox 和 Chrome 在这方面有什么区别?
我还需要做什么才能在 Firefox 中运行?
更新
我注意到如果我将标题设置如下...
`访问控制允许来源:https://www.domain.eu'
...然后飞行前OPTIONS
请求工作正常。 Access-Control-Allow-Origin
标头在 both 请求和响应中是相同的。然而,实际的GET
请求随后会因上述错误而失败。
如果我修改我的标题如下:
Access-Control-Allow-Origin: https://www.domain.eu, https://www.domain.eu
...(这是 Firefox 在错误中提到的内容),然后实际的飞行前 OPTIONS
请求失败,因为这次 Firefox 只期望在标头中有一个 https://www.domain.eu
值。
【问题讨论】:
请求中实际发送的Origin
HTTP 标头的值是多少?从 Firefox 发送的请求有什么不同吗?您引用的错误消息似乎表明请求中的Origin
标头具有https://www.domain.eu, https://www.domain.eu
,这永远不会发生。 Origin
标头应该是单一来源。
【参考方案1】:
试试:
Access-Control-Allow-Origin: https://www.domain.eu, https://domain.eu
Access-Control-Allow-Origin: https://*.domain.eu, http://*.domain.eu
Access-Control-Allow-Origin: domain.eu
Access-Control-Allow-Origin: *.domain.eu
编辑:
试试:
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE
Access-Control-Request-Method: GET, POST, OPTIONS, PUT, DELETE
文档:
访问控制允许来源
返回的资源可能有一个 Access-Control-Allow-Origin 标头,语法如下:
Access-Control-Allow-Origin: <origin> | *
origin 参数指定一个可以访问资源的 URI。浏览器必须强制执行此操作。对于没有凭据的请求,服务器可以将
*
指定为通配符,从而允许任何来源访问资源。
例如,要允许http://mozilla.com
访问资源,您可以指定:
Access-Control-Allow-Origin: http://mozilla.com
您只能指定一个 URI 或 *
【讨论】:
【参考方案2】:这个问题是由于我的解决方案中的 NuGet 包组合错误造成的。 Owin 和 Web API CORS 都被使用,导致标头混淆。
我通过回归基础并找出我需要的软件包解决了这个问题,问题就消失了。
【讨论】:
您是在其他浏览器中还是仅在 Mozilla 中具有此功能?我的意思是如果包是问题,它在任何浏览器中都不起作用......我有 CORS 适用于 Chrome,但不适用于 Mozilla,并试图找出原因。【参考方案3】:您需要在您的 Web API 项目中启用 CORS。 签出this!
【讨论】:
以上是关于跨域请求在 Firefox 中被阻止的主要内容,如果未能解决你的问题,请参考以下文章