CORS 适用于 chrome 但不适用于 firefox、angularjs

Posted

技术标签:

【中文标题】CORS 适用于 chrome 但不适用于 firefox、angularjs【英文标题】:CORS works in chrome but not firefox, angularjs 【发布时间】:2014-11-19 05:30:37 【问题描述】:

我正在尝试将 angularJS 与 Jetty 后端一起使用。

预检 CORS 请求在 chrome 中运行良好,但在 Firefox 中出现此 CORS 错误: 跨域请求被阻止:同源策略不允许读取位于http://remote.machine:8080/api/v1/provisioning/users/current-user 的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。

选项请求的标头如下:

HTTP/1.1 200 OK
Date: Wed, 24 Sep 2014 16:06:12 GMT
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-Frame-Options: DENY
Access-Control-Allow-Methods: GET, PUT, POST, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: Access-Control-Allow-Headers: Origin, Authorization, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Credentials: true
Set-Cookie: JSESSIONID=eyv8cpnnfphy1b0121uzt293y;Path=/
Content-Length: 0
Server: Jetty(9.2.2.v20140723)

角度请求设置如下:

$http.get(AS_API_URL + '/provisioning/users/current-user', 
            headers: 
                'Authorization': 'Basic ' + base64EncodedAuth               
            
        );

由于某种原因,这些标头在 Chrome 中可以正常工作,但在 Firefox 中却不行,有人知道为什么吗?我需要提供更多信息吗?

编辑:

Musa 关于 Access-Control-Allow-Headers 格式错误的说法是正确的。 我编辑了 Jetty 服务器,因此标题现在显示为:

Access-Control-Allow-Headers: Origin, Authorization, X-Requested-With, Content-Type, Accept

我感谢你 Musa,你救了我的一天 :)

【问题讨论】:

您的 Access-Control-Allow-Headers 标头格式错误。 查看安全证书/将域/网站添加到例外列表?相关问题:***.com/questions/24371734/… @Musa,将您的问题作为答案,以便 OP 可以接受。 Nordfjord,据我所知,CORS 不会影响 Get 请求。 @Owen 这不是真的。 CORS 会影响对 Web 服务器的所有请求。 Web 服务器必须以特定主机作为其值返回“Access-Control-Allow-Origin”。使用 * 作为通配符来接受任何主机。另一个标头是“Access-Control-Allow-Headers”,其值如下:“Origin, X-Requested-With, Content-Type, Accept”。 CORS 标头必须添加到服务器端。我在***.com/questions/23346863/… 为 Wildfly Web 服务器编写了一个 Java 类示例。浏览器应该无关紧要。 【参考方案1】:

为了扩展 Musa 在 cmets 中的回答,Firefox 正在阻止请求,因为以下标头具有两次而不是一次:

Access-Control-Allow-Headers: Access-Control-Allow-Headers: Origin, Authorization, X-Requested-With, Content-Type, Accept

应该改为

Access-Control-Allow-Headers: Origin, Authorization, X-Requested-With, Content-Type, Accept

【讨论】:

以上是关于CORS 适用于 chrome 但不适用于 firefox、angularjs的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 重定向适用于邮递员而不适用于 chrome (CORS)

CORS:在成功的 OPTIONS 请求后,Firefox 不发送 POST 请求......适用于 Chrome 和 IE

使用 CORS 与 LocomotiveJs 一起休息 API。适用于本地机器,但不适用于 Amazon 或 Heroku

Angular CORS 适用于 GET 但不适用于 DELETE

CORS 问题:C# API 请求适用于一个域,但不适用于另一个域

Amazon S3 CORS 适用于 HTTP,但不适用于 HTTPS