angularjs - Restangular 错误处理导致 CORS 问题?

标签 angularjs cors restangular

我们遇到了来自 API 的 restangular 和处理错误的问题。如果 API 以 200 响应,则一切正常。但是,当 API 返回 409 时,我们会收到一个可爱的消息:

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

来自有效发布操作的响应 header :

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

任何 try catch 响应中概述的 response.status 或错误处理

restangular docs results in this:
config: Object
data: ""
headers: function (name) {
status: 0
statusText: ""

我的状态始终为 0。

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

最佳答案

这真的与 restangular 无关,而是与您的网络服务器配置有关。
发生的情况是您的网络服务器未设置为在发生错误时返回 CORS header 。

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

然而,您将能够在像 fiddler 或 charles 这样的代理中看到它,或者当您直接向 api 服务器发出请求时(在 GET 请求的情况下),因为请求实际生成并且数据已返回,浏览器安全策略只是拒绝通过 AJAX 访问它,因为缺少 CORS header 。

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

解决方案:
将您的 WebServer 设置为包含 CORS header ,以防生成错误响应,您要查找的 header 在您提供的有效响应 ( Access-Control-* ) 中均可用。

关于angularjs - Restangular 错误处理导致 CORS 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25577183/

相关文章:

AngularJS & Protractor - getLocationAbsUrl() 不返回 url(字符串)而是一个对象

javascript - ag-grid 不显示嵌套的 json

c# - 在 WCF 服务上启用 CORS。获取 HTTP 405 : Method Not Allowed

rest - 返回空列表VS的“确定”。无内容

javascript - 当我打开同一页面时,应该在下次选择已经选择的项目

angularjs - AngularJS 指令范围内的 '@' 和 '=' 有什么区别?

javascript - 当你不控制服务器时跨源资源共享?

javascript - 在 Drupal 中启用和配置 cors

angularjs - 使用 Gruntjs 配置 Restangular.baseUrl

javascript - 如何使用 Restangular 停止错误链接请求?