我想在我的客户端JavaScript中捕获HTTP请求头字段,主要是Referer和User-Agent。我怎么才能访问它们?
Google Analytics设法通过JavaScript将您嵌入到您页面中的数据获取,因此这绝对是可能的。
答案 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和图像
答案 5 :(得分:0)
我认为Google会抓取某些数据服务器端 - 请记住,当一个网页加载到您的浏览器中并且其中包含Google Analytics代码时,您的浏览器会向Google的服务器发出请求; Google可以通过这种方式获取数据,也可以通过页面中嵌入的JavaScript获取数据。
答案 6 :(得分:-9)
var ref = Request.ServerVariables("HTTP_REFERER");
在引号内输入您想要的任何其他服务器变量名称。