【发布时间】:2011-03-23 14:33:37
【问题描述】:
我正在使用 XMLHttpRequest level2 进行跨源请求。 问题是如果服务器返回错误代码,例如 409,浏览器不允许我访问服务器返回的响应文本。 因此,如果服务器返回 409 并显示以下消息:“你不能再这样做了” 我只在客户端得到 409 但 xhr.responseText 是空的...
这是规范的一部分还是我缺少标题或其他东西?
【问题讨论】:
标签: xmlhttprequest cross-domain
我正在使用 XMLHttpRequest level2 进行跨源请求。 问题是如果服务器返回错误代码,例如 409,浏览器不允许我访问服务器返回的响应文本。 因此,如果服务器返回 409 并显示以下消息:“你不能再这样做了” 我只在客户端得到 409 但 xhr.responseText 是空的...
这是规范的一部分还是我缺少标题或其他东西?
【问题讨论】:
标签: xmlhttprequest cross-domain
为了补充 monsur 所说的,规范对这个特定用例并不完全清楚,但如果你看一下第 7.3 节。处理跨域请求状态,它指示实现者“确保不泄露有关请求的任何进一步信息”以应对各种错误。尽管这可能看起来过于保守,但您也可以争辩说这是一种良好/安全的最佳实践。见:http://www.w3.org/TR/cors/#cors-api-specification-response
【讨论】:
我相信这是由于浏览器对 CORS 的实施过于保守。我什至注意到在 Safari 中抛出错误时 statusCode 为 0,而不是实际的 HTTP 状态。在浏览器完善 onError 案例之前,我认为您无能为力。如果您可以控制服务器,则始终可以返回 HTTP 状态 200,然后将错误代码放在正文中。如果您想使用更标准的东西,JSON-RPC (http://json-rpc.org/) 会这样做。
【讨论】: