Restangular错误处理导致CORS问题?

时间:2014-08-29 22:43:24

标签: angularjs cors restangular

我们遇到了来自API的restangular和处理错误的问题。如果API以200响应,那么一切都很完美。但是,当API返回409时,我们会收到一个可爱的:

XMLHttpRequest无法加载https:// ** token = * 。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://127.0.0.1:9000'因此不允许访问。

有效后期操作的响应标头:

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

尝试捕获

中概述的response.status或错误处理
restangular docs results in this:
config: Object
data: ""
headers: function (name) {
status: 0
statusText: ""

我的状态总是为0。

如果您需要查看任何其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:3)

这与restangular无关,但与你的webserver配置无关 发生的事情是您的网络服务器没有设置为在发生错误时返回CORS标头。

因此,您无法访问ajax请求中的任何返回数据,即使实际返回了严格的数据。您甚至无法在Chrome的网络检查员中看到它(状态代码和标题除外)。此外,由于这是违反安全规定的行为,您甚至无法访问javascript中的状态代码,标题或任何内容。

然而,您可以在fiddler或charles之类的代理中看到它,或者直接向api服务器发出请求(如果是GET请求),因为请求 实际制作并且数据已经返回,浏览器安全策略只是拒绝通过AJAX访问它,因为缺少CORS标头。

这并不意味着你可以向任何其他域发出ajax请求,并可能与之交互。您的请求首先进入低谷的唯一原因是因为预检OPTION请求设置为允许CORS

<强>解决方案
设置WebServer以包含CORS标头,以防生成错误响应,您要查找的标头在您提供的有效响应中都可用(Access-Control- *)。