如何通过跨域 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 获取响应头?的主要内容,如果未能解决你的问题,请参考以下文章