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

Javascript 即使存在CORS头,AJAX请求也会失败,javascript,ajax,cors,Javascript,Ajax,Cors,从本地服务页面到远程服务器的AJAX请求失败,即使CORS头似乎都存在。这是javascript: $.ajax({url:'http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyjlbwfpbci6iiiInHbHqioij6etvzbnv0ams5Mwy5ytrpin0%3D',标题:{“X端点”:”http://sqs.us-east-1.amazona

从本地服务页面到远程服务器的AJAX请求失败,即使CORS头似乎都存在。这是javascript:

$.ajax({url:'http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyjlbwfpbci6iiiInHbHqioij6etvzbnv0ams5Mwy5ytrpin0%3D',标题:{“X端点”:”http://sqs.us-east-1.amazonaws.com“}})

这是一个curl命令行,执行相同的操作:

curl-vH'X端点:http://sqs.us-east-1.amazonaws.com' 'http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyjlbwfpbci6iiiInnhbhqioij6mtc3zhk4cduyaxlzexzpin0%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: *
但是,我仍然在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.
访问控制是否应该允许源代码:
标题让浏览器允许此操作

我还在网络控制台中看到一个飞行前请求,它似乎成功地使用了一个204和与上面相同的许可CORS头。以下是飞行前请求和响应标题的屏幕截图:


我看到您使用的是Chrome,众所周知它不能很好地处理本地主机CORS请求。尝试使用类似vcap.me(指向127.0.0.1)的域,或使用
--禁用web安全
标志启动chrome。

如果您使用的是访问控制允许凭据,那么您不能使用“*”作为访问控制允许来源--它需要指定为特定来源。

您也可以显示请求头吗?这些都可能很重要,应该会对您的问题有更多的了解。@RayNicholus添加了请求头。还添加了一个注释,我看到浏览器为这个请求发出了一个预飞行,这很奇怪,因为它是一个GET请求。但是,对预飞行的响应看起来应该允许AJAX请求。有几个不同的因素用于确定用户代理是否应该预飞行请求。非标准标题的存在是一个因素。您的X-Endpoint标头正在触发飞行前。@RayNicholus啊哈,有意思,我不知道。当直接从开发人员控制台复制/粘贴时,标题会出现问题,但下面的屏幕截图显示了飞行前请求/响应的所有标题。对我来说这看起来不错,但我可能遗漏了一些东西。@RayNicholus我在node.js中重新实现了我的CORS服务器(它是一个复杂的nginx配置和node.js的组合),这个问题就消失了:P因为我仍然不知道出了什么问题,而且可能永远也不会,我将删除这个问题。无论如何谢谢你的帮助!但是,使用备用域仍然不起作用——禁用web安全性可以起作用。不幸的是,这并不是一个很好的解决方案:(是的,这是一个自2010年以来公开的已知错误:但是它仍然不能与vcap.me或其他域一起工作,所以这似乎不是问题所在。一些浏览器也不允许访问控制,允许源代码为*。也将其设置为其他域(或在源代码列表中包含备用域)即使删除ACAC头文件,我仍然会收到相同的错误,因此情况似乎并非如此。我只是告诉您规范中的内容。请参见6.2.7:
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.