XmlHttpRequest getAllResponseHeaders()不返回所有标头

时间:2012-01-20 17:43:02

标签: javascript express cors

我正在尝试从ajax请求获取响应头,但jQuery的getAllResponseHeaders xhr方法只显示“Content-Type”头。谁知道为什么?

这是响应标题
访问控制允许的凭据:真
Access-Control-Allow-Headers:If-Modified-Since,Cache-Control,Content-Type,Keep-Alive,X-Requested-With,Authorization
访问控制允许方法:GET,PUT,POST,DELETE,OPTIONS
访问控制允许来源:*
访问控制 - 最大 - 年龄:1728000
授权:apikey =“apikey1”AuthenticationToken =“62364GJHGJHG”
连接:保持活跃
内容长度:240
内容类型:应用/ JSON;字符集= UTF-8
X供电-通过:快递

这是成功函数

params.success = function (response, textStatus, jqXHR) {
  console.log(jqXHR.getAllResponseHeaders())
}

这是它记录的内容......
Content-Type:application / json;字符集= UTF-8

2 个答案:

答案 0 :(得分:12)

刚碰到这个。这是因为您正在执行CORS请求而您没有公开Location标头。

您需要在Express中为您的预检CORS响应添加Access-Control-Expose-Headers

res.header('Access-Control-Expose-Headers', 'Content-Type, Location');
res.send(200);

这将解决问题。

答案 1 :(得分:1)

根据以下内容

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

Access-Control-Expose-Headers响应标头通过列出其标头指示哪些标头可以作为响应的一部分公开。

默认情况下,仅公开7个CORS安全列出的响应标头:

Cache-Control
Content-Language
Content-Length
Content-Type
Expires
Last-Modified
Pragma

因此,这对于所有标头都可访问和公开的完美工作

res.header('Access-Control-Expose-Headers', '*');