当前位置: 首页 > 面试题库 >

使用JavaScript访问网页的HTTP标头

岳俊晖
2023-03-14
问题内容

如何通过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,则可以在服务器上对其进行迭代,然后将它们作为隐藏值发送回标记中。以这种方式发送标头值可能并不理想,但是你可以针对所需的特定值进行发送。该解决方案也可以说是效率低下的,但是如果你需要它可以完成任务。



 类似资料:
  • 问题内容: 我已经使用Go 并打包了一些代码来执行Go进程之间的连接,但是我想知道是否有一种方法可以仅使用标准库中的服务器工具来连接到HTTP JSONRPC服务器(这不是我编写时遇到的问题)我自己的,只是如果不想的话就不想做)。 这是我的基本服务器设置: 而且,我希望能够从网页或简单的命令行CURL调用-只需常规POST中就能实现。 但是,此行:http : //golang.org/src/n

  • 问题内容: 我必须在公司的Intranet上刮一个非常非常简单的页面,以使我们的内部流程之一自动化(使函数的输出成功与否)。 我发现以下示例: 来自http://blog.sitescraper.net/2010/06/scraping-javascript-webpages-in- python.html ,它几乎是完美的。我只需要能够提供身份验证即可查看页面。 我一直在浏览PyQt4的文档,但

  • 问题内容: 我想捕获客户端JavaScript中的HTTP请求标头字段,主要是Referer和User-Agent。我该如何访问它们? Google Analytics(分析)设法通过将您嵌入到页面中的JavaScript来获取数据,因此绝对有可能。 问题答案: 如果要访问引荐来源网址和用户代理,客户端Javascript可以使用这些引荐来源网址和用户代理,但不能直接访问标头。 要检索引荐来源网址

  • 我更倾向于使用Lambda和Java8来设置,但是使用node.js的示例也有助于理解如何实现这一点。

  • 问题内容: 我正在尝试开发一个简单的网页抓取工具。我想提取没有代码的文本。我实现了这个目标,但是我发现在某些加载了的页面中,我没有获得良好的结果。 例如,如果一些代码添加了一些文本,则看不到它,因为当我调用 我得到的原始文本没有添加文本(因为在客户端执行了)。 因此,我正在寻找一些解决此问题的想法。 问题答案: 一旦安装了,请确保二进制文件在当前路径中可用: 例 举个例子,我用以下HTML代码创建

  • 问题内容: 如何防止使用JavaScript浏览网页? 问题答案: 使用可以显示消息,但不会中断导航(因为为时已晚)。但是,使用会中断导航: 注意:返回空字符串,因为较新的浏览器提供了诸如“任何未保存的更改将丢失的信息”之类的消息,这些消息不能被覆盖。 在较旧的浏览器中,您可以指定要在提示中显示的消息: