Cross Origin 4xx错误响应被阻止

时间:2011-03-18 14:20:06

标签: xmlhttprequest cross-domain

我正在使用XMLHttpRequest level2进行跨源请求。 问题是如果服务器返回错误代码,例如409浏览器不允许我访问服务器返回的响应文本。 因此,如果服务器返回409并显示以下消息:“您不允许再次执行此操作” 我只在客户端获得409,但xhr.responseText是空的......

这是规范的一部分还是我缺少一个标题?

2 个答案:

答案 0 :(得分:2)

我认为这是CORS过度保守的浏览器实现的结果。我甚至在Safari中注意到,抛出错误时statusCode为0,而不是实际的HTTP状态。在浏览器打开onError案例之前,我认为你无能为力。如果您可以控制服务器,则可以始终返回HTTP状态200,然后将错误代码放入正文中。如果你想使用更标准的东西,JSON-RPC(http://json-rpc.org/)会这样做。

答案 1 :(得分:2)

要添加monsur所说的内容,这个特定用例的规范并不完全清楚,但是如果你看一下7.3节。处理跨源请求状态,它指示实现者“确保不会泄露有关请求的任何进一步信息”以解决各种错误。虽然这可能看起来过于保守,但你也可以说这是一个很好/安全的最佳实践。请参阅:http://www.w3.org/TR/cors/#cors-api-specification-response