Javascript 为什么getAllResponseHeaders()输出与浏览器看到的不同?

Javascript 为什么getAllResponseHeaders()输出与浏览器看到的不同?,javascript,google-chrome,http,xmlhttprequest,cors,Javascript,Google Chrome,Http,Xmlhttprequest,Cors,我有一段简单的代码,我试图用它读取URL响应的一些标题: $.ajax(manifestAnchor.href, { type: "HEAD" }).done((data, textStatus, jqXHR) => { console.log(jqXHR.getAllResponseHeaders()); }); 在我的测试用例中,它输出以下内容: 日期:2017年9月13日星期三09:44:15 GMT 内容类型:application/vnd.apple.mpegu

我有一段简单的代码,我试图用它读取URL响应的一些标题:

$.ajax(manifestAnchor.href, {
    type: "HEAD"
}).done((data, textStatus, jqXHR) => {
    console.log(jqXHR.getAllResponseHeaders());
});
在我的测试用例中,它输出以下内容:

日期:2017年9月13日星期三09:44:15 GMT
内容类型:application/vnd.apple.mpegur
缓存控制:没有缓存

但是,在浏览器中检查响应时,我会看到一组不同的标题:


为什么会这样

浏览器将前端JavaScript代码限制为只能访问
缓存控件
内容语言
内容类型
过期
上次修改
,以及
Pragma
响应头,除非响应具有列出浏览器也应公开的其他标题名称的
访问控制公开标题
响应标题

对于问题中显示的响应,
Access Control Expose Headers:Date
response头告诉浏览器也要公开
Date
头。因此,您的代码能够获取该标头。但是,
Access Control Expose Headers
header没有列出
服务器
接受范围
、或
内容长度
头名称。因此,您的代码无法获取这些

再说一次,你的浏览器是阻止你的代码达到这些目标的原因。浏览器本身获取所有响应头,这就是为什么您可以在浏览器devtools中看到它们。但仅仅因为你能在那里看到它们并不意味着浏览器会将它们暴露给你的代码;浏览器将只公开
访问控制公开标题
标题告诉它要公开的内容