【问题标题】:Restangular error handling results in CORS issue?Restangular错误处理导致CORS问题?
【发布时间】:2014-10-23 23:47:21
【问题描述】:

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

XMLHttpRequest 无法加载 https://**token=*。请求的资源上不存在“Access-Control-Allow-Origin”标头。 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

任何试图捕获响应状态或错误处理,如

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

我的状态总是 0。

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

【问题讨论】:

    标签: angularjs cors restangular


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢您的推动。这似乎是 nginx 开箱即用的 巨大 限制,我无法理解为什么它默认为这种行为。我们最终在返回时在 API 中捕获了不成功的代码并手动设置了 CORS 标头。到目前为止似乎很有魅力。
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2020-01-12
    • 2018-09-30
    相关资源
    最近更新 更多