如何通过JavaScript访问HTTP请求标头字段?

时间:2008-10-20 22:21:21

标签: javascript http http-headers

我想在我的客户端JavaScript中捕获HTTP请求头字段,主要是Referer和User-Agent。我怎么才能访问它们?


Google Analytics设法通过JavaScript将您嵌入到您页面中的数据获取,因此这绝对是可能的。

  

相关:
  Accessing the web page's HTTP Headers in JavaScript

7 个答案:

答案 0 :(得分:63)

如果您想访问referrer和user-agent,那些可用于客户端Javascript,但不能直接访问标题。

要检索引荐来源,请使用document.referrer 要访问用户代理,请使用navigator.userAgent

正如其他人所指出的那样,HTTP标头不可用,但你明确询问了referer和user-agent,它们可以通过Javascript获得。

答案 1 :(得分:8)

几乎按照定义,客户端JavaScript不在http请求的接收端,因此它没有要读取的标头。最常见的是,您的JavaScript是http响应的结果。如果您尝试获取生成响应的http请求的值,则必须编写服务器端代码以将这些值嵌入到您生成的JavaScript中。

让服务器端代码生成客户端代码变得有点棘手,所以请确保这是您所需要的。例如,如果您需要用户代理信息,您可能会发现它足以获取JavaScript为浏览器检测提供的各种值。从navigator.appName和navigator.appVersion开始。

答案 2 :(得分:6)

这可以通过Javascript访问,因为它是已加载文档的属性,而不是其父文件的属性。

这是一个简单的例子:

<script type="text/javascript">
document.write(document.referrer);
</script>

PHP中的相同内容是:

<?php echo $_SERVER["HTTP_REFERER"]; ?>

答案 3 :(得分:1)

Referer和user-agent是请求标头,而不是响应标头。

这意味着它们是通过浏览器发送的,或者是您的ajax调用(可以修改该值),并在获得HTTP响应之前决定它们。

所以基本上你不是要求HTTP标头,而是要求浏览器设置。

您从document.referer和navigator.userAgent获得的值可能不是实际的标题,而是浏览器的设置。

答案 4 :(得分:1)

从JavaScript获取标头的一种方法是使用WebRequest API,它使我们能够访问源自http或websockets的不同事件,其生命周期如下: WebRequest Lifecycle

因此,为了访问页面的标题,它是这样的:

    browser.webRequest.onHeadersReceived.addListener(
     (headersDetails)=> {
      console.log("Request: " + headersDetails);
    },
    {urls: ["*://hostName/*"]}
    );`

问题在于,要使用此API,必须从浏览器中执行它,也就是说,浏览器对象引用浏览器本身(选项卡,图标,配置),并且浏览器确实可以访问所有任何页面的“请求和响应”,因此您必须向用户询问权限才能执行此操作(必须在清单中声明权限,浏览器才能执行这些权限)

作为浏览器的一部分,您也无法控制页面,也就是说,您不能再(而不是直接)操纵DOM,因此要再次控制DOM,可以执行以下操作:

    browser.webRequest.onHeadersReceived.addListener(
        browser.tabs.executeScript({
        code: 'console.log("Headers success")',
    });
});

或者如果您想运行很多代码

    browser.webRequest.onHeadersReceived.addListener(
        browser.tabs.executeScript({
        file: './headersReveiced.js',
    });
});

通过控制浏览器,我们可以注入CSS和图像

文档:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onHeadersReceived

答案 5 :(得分:0)

我认为Google会抓取某些数据服务器端 - 请记住,当一个网页加载到您的浏览器中并且其中包含Google Analytics代码时,您的浏览器会向Google的服务器发出请求; Google可以通过这种方式获取数据,也可以通过页面中嵌入的JavaScript获取数据。

答案 6 :(得分:-9)

var ref = Request.ServerVariables("HTTP_REFERER");

在引号内输入您想要的任何其他服务器变量名称。