如何处理 CORS 错误代码?

col*_*lin 7 javascript ajax http cors

编辑:我刚刚意识到这是AJAX、CORS、Chrome 和 HTTP 错误代码 (401,403,404,500)推荐解决方案的副本,他在最后尝试了我提出的想法。但是我不知道他是否成功了(无用的用户?),并且没有其他人发布了解决方案甚至评论,所以我认为值得寻找新的答案。

问题:

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

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

状态码 401

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

被遮挡的响应对象

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

Tro*_*ott 5

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

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

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

在客户端进行设计妥协之前,先在服务器端修复它。这可能会立即解决您的问题。

  • 换句话说,如果您希望使用 200 以外的响应代码中的 JSON 数据,则需要在 200 以外的响应代码上发送 CORS 标头。 (5认同)
  • 服务器成功发送必要的标头。它也需要在失败时发送它们。 (2认同)