【问题标题】:How do I fetch all headers in Javascript?如何获取 Javascript 中的所有标头?
【发布时间】:2020-04-04 02:21:57
【问题描述】:

快速而肮脏的实验:

function fetchHead(url) {
    var request = new XMLHttpRequest();
    request.onreadystatechange = function () {
        if (request.readyState === XMLHttpRequest.DONE) {
            console.log(request.getAllResponseHeaders())
        }
    }

    request.open('HEAD', url, true)
    request.send(null)
}

它只显示三个标题:["cache-control", "content-type", "expires"]。但实际响应中有十几个标头,如开发工具栏中的网络检查器中所示。

是否有任何(其他)方法可以获取 Javascript 中的所有标头?是否可以(完全)从 Javascript 中读取自定义响应标头?

PS - 响应确实有 Access-Control-Allow-Origin: *。不知何故,浏览器似乎确实去掉了很多标题。

【问题讨论】:

  • 你用的是哪个浏览器?
  • @klanmiko Google Chrome 83

标签: javascript ajax xmlhttprequest http-headers response-headers


【解决方案1】:

出于安全原因,浏览器通过 XMLHttpRequest 限制对大多数 HTTP 标头调用的访问。最好的参考可能是Fetch standard

这些受限列表可以通过服务器返回一个Access-Control-Expose-Headers 标头来扩展,告诉浏览器哪些标头对于 JavaScript 可以安全访问。

【讨论】:

  • 所以基本上没有使用代理就没有办法解决它。这是反高潮,但很清楚。
  • 正确。或者,您可以请求访问 set-cookie 标头,从而访问您的域不应该看到的 cookie。无限制访问的危险只是一个例子。
  • 感谢您的更正。你是对的 - 我已经有一段时间没有看到这个了!
【解决方案2】:

我无法重现此内容。 MDN 表示所有标题都将以小写形式返回。

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 2011-09-13
    • 2013-10-25
    • 2011-04-22
    • 2014-07-25
    • 2017-07-07
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多