如何通过跨域 ajax 获取响应头?

Posted

技术标签:

【中文标题】如何通过跨域 ajax 获取响应头?【英文标题】:How can I get response header via cross-domain ajax? 【发布时间】:2011-09-01 00:51:20 【问题描述】:

我正在尝试阅读文档,我必须承认这并不容易阅读。我没有问题(在添加 Access-Control-Allow-Origin 标头后)读取 responseText,但无法在除 Firefox 之外的任何地方获取响应标头。

那么,我的问题是使用跨域 ajax 获取响应标头的正确方法是什么?

我尝试使用 (Access-Control-Expose-Headers),但再次读取标题失败。

【问题讨论】:

【参考方案1】:

所以它的工作方式是在 Access-Control-Expose-Headers 标头中指定您希望客户端可以访问的标头。例如,如果您的服务器设置了 Foo 响应标头,并且您希望客户端能够读取它,则您的服务器还应该发送以下标头:

Access-Control-Expose-Headers: Foo

在客户端,您可以通过调用 xhr.getAllResponseHeaders() 来读取所有响应标头。这会将响应标头作为字符串返回,然后您可以使用以下代码将其解析为对象:https://gist.github.com/706839

这是对事物应该如何运作的解释。但是,请注意,旧浏览器中存在无法在客户端读取响应标头的错误。更多详情请看这里:CORS xmlhttprequest HEAD method

【讨论】:

您好,我已将以下内容添加到服务器端 API。 header(Access-Control-Allow-Headers: temp'); header('Access-Control-Expose-Headers: temp); header('temp: '. 12345); 当我向 API 发出 cURL 请求时,我得到了标头以及响应数据。但是当我对同一个 API 进行 AJAX 调用时,我只得到数据,没有标题。 Anish,你的评论听起来更适合作为它自己的 Stack Overflow 问题。 即使在今天这个问题/答案是否相关。【参考方案2】:

我遇到了同样的问题,在 Chromium 邮件列表上找到了答案,这个问题在 webkit 中已修复,并将在 crhomium ~19 中实现。

我会尝试寻找主题并更新我的答案。

【讨论】:

以上是关于如何通过跨域 ajax 获取响应头?的主要内容,如果未能解决你的问题,请参考以下文章

跨域并设置headers的请求

AJAX跨域问题解决方法——被调用方解决跨域

Ajax-08 跨域获取最新电视节目清单实例

header设置跨域问题

如何使用 capybara-webkit 获取响应头和时间

Access-Control-Expose-Headers 响应报头跨域 公开响应头