无法读取当前标头。您可以向同一 URL 发出另一个请求并读取其标头,但不能保证标头与当前标头完全相等。
使用以下 JavaScript 代码通过执行请求来获取所有 HTTP 标头:get
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 日
-
具体来说,该方法在以下部分中指定:w3.org:
XMLHttpRequest
:getallresponseheaders()
方法getAllResponseHeaders()
-
MDN文档也很好:developer.mozilla.org:
XMLHttpRequest
。
这不会为您提供有关原始页面请求的HTTP响应标头的信息,但它可用于对这些标头进行有根据的猜测。下面将对此进行详细介绍。
从初始页面请求中获取标头值:
这个问题是几年前第一次被问到的,专门询问如何获取当前页面(即运行javascript的同一页面)的原始HTTP响应标头。这与简单地获取任何HTTP请求的响应标头完全不同。对于初始页面请求,标头不容易被 javascript 使用。如果通过 AJAX 再次请求同一页,所需的标头值是否可靠且足够一致将取决于您的特定应用程序。
以下是解决此问题的一些建议。
1. 对资源的请求,这些资源在很大程度上是静态的
如果响应在很大程度上是静态的,并且标头在请求之间不会有太大变化,则可以对当前所在的同一页面发出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. 做出推断
有一些 BOM 属性(浏览器对象模型),浏览器通过查看标头来确定这些属性。其中一些属性直接反映 HTTP 标头(例如 设置为 HTTP 标头字段的值)。通过嗅探可用的属性,您可能能够找到所需的内容,或者一些指示HTTP响应包含的内容的线索。navigator.userAgent
User-Agent
3. 存放它们
如果您控制服务器端,则可以在构造完整响应时访问所需的任何标头。值可以与页面一起传递到客户端,隐藏在某些标记中,或者可能隐藏在内联的JSON结构中。如果您希望每个HTTP请求标头都可用于javascript,则可以在服务器上循环访问它们,并将它们作为标记中的隐藏值发送回去。以这种方式发送标头值可能并不理想,但您当然可以针对所需的特定值执行此操作。这个解决方案也可以说是低效的,但如果你需要它,它可以完成这项工作。
-
-
-
java string.getBytes(“UTF-8”) javascript equivalent 我在java中有这个字符串: 我的印象是 unescape(encodeURIComponent()) 会正确地将字符串转换为 UTF-8。难道不是这样吗? 参考:
-
在 REST API 调用之前对 meta 进行 OPTIONS 调用 我试图理解这个系统是如何在引擎盖下工作的。该系统是基于非常标准的,我没有得到的客户端在每次API调用之前进行调用,并且XML内容以该格式返回。它使用泽西爪哇。 B.此调用是由浏览器自
-
使用 Java 进行 AES 加密,并使用 Javascript 进行解密 我正在制作一个应用程序,它需要基于Java的AES加密和基于JavaScript的解密。我使用以下代码进行加密作为基本形式。