【问题标题】:How to get HTTP header from Javascript?如何从 Javascript 获取 HTTP 标头?
【发布时间】:2014-07-25 12:16:12
【问题描述】:

我有一个只提供 静态文件(html、css、js)的 Tomcat 服务器。当请求进来时,它会被代理服务器拦截。代理服务器对用户进行身份验证并将userId 字段添加到标头并将其转发给我的Tomcat 服务器。

如何从 javascript 访问已存储在标头中的 userId

谢谢

【问题讨论】:

  • Javascript 在客户端执行。除非您将用户 ID 作为 Tomcat 数据的一部分发回,否则您不能这样做。
  • 如果我从该页面发出请求,然后在响应中获取标头会怎样?我能做到吗?

标签: javascript html proxy http-headers


【解决方案1】:

你不能,但是......

如果将此类标头发送到浏览器,您可以发出 ajax 请求并从中获取该值。

这个小 javascript 在您的情况下可能很有用。当心,谨慎使用它并根据您的需要清理或更改 URL,这只是一个“概念”,而不是适用于每种情况的复制粘贴解决方案。在许多其他情况下,这不是一个有效的解决方案,因为它不是加载文档的标题,而是另一个请求。无论如何,服务器、内容类型等都可以非常安全地使用。

xmlhttp = new XMLHttpRequest();
xmlhttp.open("HEAD", document.URL ,true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
  console.log(xmlhttp.getAllResponseHeaders());
  }
}
xmlhttp.send();

编辑:哎呀,似乎已经知道那部分了...Accessing the web page's HTTP Headers in JavaScript 没看完。

【讨论】:

    【解决方案2】:

    使用以下脚本访问用户 ID

    var req = new XMLHttpRequest();
    req.open('GET', document.location, false);
    req.send(null);
    headers = req.getAllResponseHeaders().split("\n")
         .map(x=>x.split(/: */,2))
         .filter(x=>x[0])
         .reduce((ac, x)=>{ac[x[0]] = x[1];return ac;}, {});
    
    console.log(headers.userId);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-11
      • 2012-10-25
      • 1970-01-01
      • 2010-09-12
      • 2016-09-21
      • 1970-01-01
      • 2014-09-19
      • 2017-11-06
      相关资源
      最近更新 更多