使用JavaScript访问网页的HTTP标头

使用JavaScript访问网页的HTTP标头,第1张

使用JavaScript访问网页的HTTP标头

不幸的是,没有一个API可以为你的初始页面请求提供HTTP响应标头。那是这里发布的原始问题。也有人反复询问,因为有些人想获得原始页面请求的实际响应头,而不发出另一个请求。

对于AJAX请求:
如果通过AJAX发出HTTP请求,则可以使用getAllResponseHeaders()方法获取响应标头。它是XMLHttpRequest API的一部分。要查看如何应用此fetchSimilarHeaders()功能,请查看以下功能。请注意,这是解决该问题的方法,对于某些应用程序来说并不可靠。

myXMLHttpRequest.getAllResponseHeaders();
  • 在以下XMLHttpRequest候选推荐中指定了该API:XMLHttpRequest-W3C候选推荐

  • 具体来说,该getAllResponseHeaders()方法在以下部分中指定:w3.org XMLHttpRequest::该getallresponseheaders()方法

  • 该MDN文档是好的,太:developer.mozilla.org: XMLHttpRequest。

这不会为你提供有关原始页面请求的HTTP响应标头的信息,但是可以用来对那些标头进行有根据的猜测。接下来将对此进行更多描述。

从初始页面请求中获取标题值:
这个问题是几年前提出的,专门询问如何获取当前页面的原始HTTP响应标头(即运行javascript的同一页面)。与仅获取任何HTTP请求的响应标头相比,这是一个完全不同的问题。对于初始页面请求,标头不易为javascript提供。如果你再次通过AJAX请求同一页,则所需的标头值是否可靠且足够一致将取决于你的特定应用程序。

以下是解决该问题的一些建议。

1.Requests on Resources which are largely static
如果响应在很大程度上是静态的,并且标题在请求之间不会有太大变化,则可以针对当前所在的同一页面发出AJAX请求,并假定它们是与页面相同的值HTTP响应。这可以允许你使用上述漂亮的XMLHttpRequest API访问所需的标头。

function fetchSimilarHeaders (callback) {    var request = new XMLHttpRequest();    request.onreadystatechange = function () {        if (request.readyState === XMLHttpRequest.DONE) { // // The following headers may often be similar // to those of the original page request... // if (callback && typeof callback === 'function') {     callback(request.getAllResponseHeaders()); }        }    };    //    // Re-request the same page (document.location)    // We hope to get the same or similar response headers to those which     // came with the current page, but we have no guarantee.    // Since we are only after the headers, a HEAD request may be sufficient.    //    request.open('HEAD', document.location, true);    request.send(null);}

如果你确实必须依赖请求之间的一致值,则这种方法会出现问题,因为你不能完全保证它们是相同的。这将取决于你的特定应用程序,以及你是否知道所需的值不会从一个请求更改为另一个请求。

2.Make Inferences
有一些BOM性质,其浏览器确定通过查看头(浏览器对象模型)。其中一些属性直接反映HTTP标头(例如navigator.userAgent,设置为HTTP User-Agent标头字段的值)。通过嗅探可用属性,你可能能够找到所需的内容,或一些线索来指示HTTP响应包含的内容。

3.Stash them
如果控制服务器端,则可以在构造完整响应时访问所需的任何标头。可以将值与页面一起传递给客户端,并以某种标记或内联的JSON结构形式存储。如果你希望每个HTTP请求标头都可用于javascript,则可以在服务器上对其进行迭代,然后将它们作为隐藏值发送回标记中。以这种方式发送标头值可能并不理想,但是你可以针对所需的特定值进行发送。该解决方案也可以说是效率低下的,但是如果你需要它可以完成任务。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5011493.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存