即使存在CORS头,AJAX请求也会失败

时间:2013-07-16 03:22:24

标签: javascript ajax cors

从本地提供的页面到远程服务器的AJAX请求失败,即使看起来CORS标题都存在。这是javascript:

$.ajax({url: 'http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyJlbWFpbCI6IiIsInNhbHQiOiJ6eTVzbnV0ams5MWY5YTRpIn0%3D', headers: {"X-Endpoint": "http://sqs.us-east-1.amazonaws.com"}})

这是一个做同样事情的curl命令行:

curl -vH 'X-Endpoint: http://sqs.us-east-1.amazonaws.com' 'http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyJlbWFpbCI6IiIsInNhbHQiOiJ6MTc3ZHk4cDUyaXlzeXZpIn0%3D'

如果运行上面的命令,您可以看到响应CORS头是最大允许的:

< HTTP/1.1 200 OK
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Endpoint,Accept,Origin,Referer,X-Something
< Access-Control-Allow-Methods: GET, POST, OPTIONS
< Access-Control-Allow-Origin: *

以下是与请求一起发送的标头:

Request Headersview source
Accept: */*
Origin: http://localhost:3000
Referer: http://localhost:3000/upload
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
X-Endpoint: http://sqs.us-east-1.amazonaws.com

但是,我仍然看到Chrome网络控制台中的请求失败:

XMLHttpRequest cannot load http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyJlbWFpbCI6IiIsInNhbHQiOiJ6eTVzbnV0ams5MWY5YTRpIn0%3D. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.

Access-Control-Allow-Origin: *标题是否应该让浏览器允许这样做?

我也在网络控制台中看到了一个预检请求,它似乎是成功的204,以及与上面相同的允许CORS头。这是预检请求和响应标题的屏幕截图:

http://i.imgur.com/TMRPUPG.png

2 个答案:

答案 0 :(得分:1)

我发现您使用的Chrome已知与localhost CORS请求不匹配。尝试使用像vcap.me这样的域(指向127.0.0.1)或使用--disable-web-security标志启动chrome。

答案 1 :(得分:0)

如果您使用的是Access-Control-Allow-Credentials,则无法使用&#34; *&#34;对于Access-Control-Allow-Origins - 需要将其指定为特定原点。