Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 重新启动语言错误处理导致CORS问题?_Angularjs_Cors_Restangular - Fatal编程技术网

Angularjs 重新启动语言错误处理导致CORS问题?

Angularjs 重新启动语言错误处理导致CORS问题?,angularjs,cors,restangular,Angularjs,Cors,Restangular,我们在重新启动和处理API错误方面遇到问题。如果API的响应是200,那么一切都可以正常工作。但是,当API返回409时,我们会收到一个可爱的: XMLHttpRequest无法加载https://**令牌=*。请求的资源上不存在“Access Control Allow Origin”标头。来源“http://127.0.0.1:9000因此不允许访问 来自有效post操作的响应标头: Access-Control-Allow-Credentials:true Access-Control-A

我们在重新启动和处理API错误方面遇到问题。如果API的响应是200,那么一切都可以正常工作。但是,当API返回409时,我们会收到一个可爱的:

XMLHttpRequest无法加载https://**令牌=*。请求的资源上不存在“Access Control Allow Origin”标头。来源“
http://127.0.0.1:9000因此不允许访问

来自有效post操作的响应标头:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Authorization,                 Accept, X-Authorization, User-Agent, DNT, Cache-Control, X-Mx-ReqToken, Keep-Alive, If-Modified-Since
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:http://127.0.0.1:9000
Access-Control-Max-Age:1728000
Cache-Control:private, must-revalidate
Connection:keep-alive
Content-Type:text/html; charset=utf-8
Date:Fri, 29 Aug 2014 21:55:51 GMT
ETag:"*****"
Server:nginx/1.6.0
X-Frame-Options:SAMEORIGIN
X-Powered-By:HHVM/3.3.0-dev+2014.08.22

Response headers from a post operation with a 409 response captured from postman:
Cache-Control →no-cache
Connection →keep-alive
Content-Encoding →gzip
Content-Type →text/html; charset=utf-8
Date →Fri, 29 Aug 2014 21:56:59 GMT
Server →nginx/1.6.0
Transfer-Encoding →chunked
X-Frame-Options →SAMEORIGIN
X-Powered-By →HHVM/3.3.0-dev+2014.08.22
捕获响应的任何尝试。状态或错误处理如中所述

restangular docs results in this:
config: Object
data: ""
headers: function (name) {
status: 0
statusText: ""
我的状态始终为0


如果您需要查看任何其他信息,请告诉我

这实际上与Restanglar无关,而是与您的Web服务器配置有关。
发生的情况是,您的Web服务器没有设置为在发生错误时返回CORS头

因此,您无法访问从ajax请求返回的任何数据,即使是实际返回的数据也很困难。你甚至无法在chrome的网络检查器中看到它(除了状态代码和标题)。此外,由于这是一种安全违规行为,您甚至无法从javascript访问状态代码、标题或任何内容—所有内容都被阻止

但是,您可以在代理(如fiddler或charles)中看到它,或者当您直接向api服务器发出请求时(在GET请求的情况下),因为实际发出了请求,并且将返回数据,浏览器安全策略只是拒绝通过AJAX访问它,因为缺少CORS头

这并不意味着您可以向任何其他域发出ajax请求并可能与之交互。您的请求一开始就处于低谷的唯一原因是,飞行前选项请求被设置为允许CORS

解决方案

将Web服务器设置为包含CORS标头。如果生成错误响应,您要查找的标头在您提供的有效响应中都可用(访问控制-*)

非常感谢你的推动。这似乎是nginx开箱即用的一个巨大限制,我无法理解为什么它会默认这种行为。我们最终在返回时捕获API中的非成功代码,并手动设置CORS头。到目前为止似乎很有魅力。