如何处理CORS错误代码?

时间:2014-11-02 01:10:37

标签: javascript ajax http cors

编辑:我刚刚意识到这是Recommended solution for AJAX, CORS, Chrome & HTTP error codes (401,403,404,500)的副本,他尝试了我最后提出的想法。但我无法判断他是否成功(dud用户?),没有其他人发布解决方案甚至评论,所以我认为值得为新答案钓鱼。

问题:

  • 我发送了一个正确执行(编辑: IMproperly-executed 。故事结束......)CORS请求。
  • 服务器收到请求并尝试处理它。
  • 服务器返回错误响应,例如422 Unprocessable Entity,以及有关错误的JSON信息。我的想法是我的应用程序可以收到此错误信息并在UI中正确处理。
  • 浏览器阻止我的错误处理程序获取响应内容,甚至获取状态代码。

显示浏览器收到401状态代码,但将其视为CORS安全错误:

Status Code 401

响应对象,显示我的代码无法访问响应数据(data: ""status: 0):

Obscured Response Object

其他人如何处理此限制?我现在最好的猜测是劫持HTTP"成功"代码(2XX)作为错误代码,然后在响应中包含错误信息。这使我无法以正常方式使用ajax错误处理程序,但我仍然将其作为全局ajax过滤器处理,因此该过滤器将捕获异常成功代码并触发错误处理程序。

3 个答案:

答案 0 :(得分:3)

控制台消息指示服务器在发送401响应代码时未发送所需的Access-Control-Allow-Origin标头。

除非您修复内容,否则您无法使用CORS错误处理程序将内容注入DOM。

服务器可能正在使用200响应代码的响应上正确发送标头。但是,如果您希望使用这些响应代码中的数据,则需要为其他响应代码执行此操作。

在客户端进行设计妥协之前,在服务器端修复此问题。这可以马上解决你的问题。

答案 1 :(得分:0)

这似乎是一个不透明的响应,你无法获得标题或响应。并且所有内容都设置为null或空。

https://developer.mozilla.org/en-US/docs/Web/API/Response/type

或者可能在服务器中添加:

Access-Control-Allow-Origin: *

答案 2 :(得分:0)

答案很晚,但是如果有人想检查在发送XMLHttpRequest时是否发生了错误,然后采取适当的措施(在CLIENT端),那么这是一个快速的解决方法:

try{
    request.send();
}catch(err){
    if(e.toString().startsWith("NetworkError")){
        //pasre the string to check error code
        //and take appropriate actions
    }
}

之所以需要这样做,是因为onreadystatechange发生时NetworkError函数没有执行,实际上整个脚本都终止了。