CORS在Chrome中可以工作但在Firefox中无法正常运行,涉及AngularJS。

7
我正在尝试使用angularJS与Jetty后端进行开发。在chrome中,预检CORS请求运行良好,但是在firefox中,我会遇到此CORS错误: 跨域请求被阻止:同源策略不允许读取远程资源 http://remote.machine:8080/api/v1/provisioning/users/current-user。可以通过将资源移动到同一个域或启用CORS来解决。 Options请求的头如下:
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)
Angular的请求设置如下:
$http.get(AS_API_URL + '/provisioning/users/current-user', {
            headers: {
                'Authorization': 'Basic ' + base64EncodedAuth               
            }
        });

由于某种原因,这些标头在Chrome中运行良好,但在Firefox中却无法正常工作,是否有人知道原因?我需要提供更多信息吗?

编辑:

Musa正确指出Access-Control-Allow-Headers格式不正确。 我编辑了Jetty Server,使标头现在读作:

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

我要感谢你,Musa,你刚刚帮我解决了问题 :)


5
你的 Access-Control-Allow-Headers 头部似乎格式不正确。 - Musa
请查看安全证书/将域名/网站添加到例外列表中。相关问题:https://dev59.com/9mAf5IYBdhLWcg3wsUbT - stackErr
@Musa,请将你的问题形式化为一个答案,这样OP就可以接受它了。 据我所知,CORS不会影响Get请求。 - Owen
@Owen 这并不正确。CORS会影响到对于Web服务器的任何请求。Web服务器必须返回一个 "Access-Control-Allow-Origin" 的特定主机值。使用 * 作为通配符以接受任何主机。另一个标题是 "Access-Control-Allow-Headers",其值为以下内容: "Origin, X-Requested-With, Content-Type, Accept"。CORS标头必须添加到服务器端。我在https://dev59.com/RmAg5IYBdhLWcg3wpMWz#23434583中为Wildfly Web服务器编写了一个Java类示例。浏览器不应该有任何问题。 - javaauthority
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
1
为了进一步解释Musa在评论中的回答,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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,