在JavaScript中访问网页的HTTP头
如何通过JavaScript访问页面的HTTP响应头?
与此问题相关, 该问题已修改为询问有关访问两个特定HTTP标头的问题。
有关:
如何通过JavaScript访问HTTP请求标题字段?
无法读取当前标题。 您可以对同一个网址发出另一个请求并读取其标题,但不能保证标题完全等于当前网页。
使用以下JavaScript代码通过执行get
请求来获取所有HTTP标头:
var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
var headers = req.getAllResponseHeaders().toLowerCase();
alert(headers);
不幸的是,没有API为您提供初始页面请求的HTTP响应头。 这是在这里发布的原始问题。 它也一再被问到,因为有些人希望得到原始页面请求的实际响应标题而不发布另一个。
对于AJAX请求:
如果HTTP请求是通过AJAX创建的,则可以使用getAllResponseHeaders()
方法获取响应头。 它是XMLHttpRequest API的一部分。 要了解如何应用它,请查看下面的fetchSimilarHeaders()
函数。 请注意,这是针对某些应用程序不可靠的问题的解决方法。
myXMLHttpRequest.getAllResponseHeaders();
API在以下XMLHttpRequest候选建议中指定:XMLHttpRequest - W3C候选建议2010年8月3日
具体而言, getAllResponseHeaders()
方法在以下部分中指定:w3.org: XMLHttpRequest
: getallresponseheaders()
方法
MDN文档也很好:developer.mozilla.org: XMLHttpRequest
。
这不会为您提供有关原始页面请求的HTTP响应标头的信息,但它可用于对这些标头是什么进行有根据的猜测。 接下来将介绍更多内容。
从初始页面请求获取标题值:
几年前,这个问题首次被问到,具体询问如何获取当前页面的原始HTTP响应标头(即运行javascript的同一页面)。 这与完成任何HTTP请求的响应头信息是完全不同的问题。 对于最初的页面请求,头文件不容易提供给JavaScript。 如果您通过AJAX再次请求同一页面,您所需要的标题值是否可靠且充分一致取决于您的特定应用程序。
以下是一些解决该问题的建议。
1.请求资源基本上是静态的
如果响应基本上是静态的,并且标题不会在请求之间发生很大变化,那么可以对当前所在的同一页面发出AJAX请求,并假定它们是属于页面一部分的相同值HTTP响应。 这可以让你使用上面描述的很好的XMLHttpRequest API访问你需要的头文件。
function fetchSimilarHeaders (callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === 4) {
//
// 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.做出推论
有一些BOM属性 (浏览器对象模型)是浏览器通过查看标题确定的。 其中一些属性直接反映HTTP标题(例如navigator.userAgent
设置为HTTP User-Agent
标题字段的值)。 通过嗅探可用的属性,你可能能够找到你需要的东西,或者一些线索来指示HTTP响应包含的内容。
把他们藏起来
如果您控制服务器端,则可以在构建完整响应时访问您喜欢的任何标题。 值可以通过页面传递给客户端,存储在某个标记中,或者也可以嵌入JSON结构中。 如果您希望每个HTTP请求标头都可用于您的JavaScript,则可以在服务器上遍历它们并将它们作为标记中的隐藏值发回。 以这种方式发送标题值可能并不理想,但您可以为您需要的特定值执行此操作。 这种解决方案也可能是无效的,但如果您需要它,它可以完成这项工作。
使用XmlHttpRequest
您可以拉起当前页面,然后检查响应的http标头。
最好的情况是只做一个HEAD
请求,然后检查标题。
有关这样做的一些示例,请参阅http://www.jibbering.com/2002/4/httprequest.html
只是我2美分。
链接地址: http://www.djcxy.com/p/41077.html