[英]How do I access the HTTP request header fields via JavaScript?
我想在客戶端 JavaScript 中捕獲 HTTP 請求標頭字段,主要是 Referer 和 User-Agent。 我如何訪問它們?
Google Analytics 設法通過 JavaScript 獲取您嵌入頁面中的數據,因此這絕對是可能的。
如果您想訪問引用者和用戶代理,它們可用於客戶端 Javascript,但不能直接訪問標頭。
要檢索引用者,請使用document.referrer
。
要訪問用戶代理,請使用navigator.userAgent
。
正如其他人所指出的,HTTP 標頭不可用,但您特別詢問了可通過 Javascript 獲得的引用器和用戶代理。
幾乎根據定義,客戶端 JavaScript 不在 http 請求的接收端,因此它沒有要讀取的標頭。 最常見的是,您的 JavaScript 是 http 響應的結果。 如果您嘗試獲取生成響應的 http 請求的值,則必須編寫服務器端代碼以將這些值嵌入您生成的 JavaScript 中。
讓服務器端代碼生成客戶端代碼有點棘手,所以請確保這是您所需要的。 例如,如果您想要用戶代理信息,您可能會發現獲取 JavaScript 為瀏覽器檢測提供的各種值就足夠了。 從 navigator.appName 和 navigator.appVersion 開始。
這可以通過 Javascript 訪問,因為它是加載文檔的屬性,而不是其父文檔的屬性。
這是一個快速示例:
<script type="text/javascript">
document.write(document.referrer);
</script>
在 PHP 中同樣的事情是:
<?php echo $_SERVER["HTTP_REFERER"]; ?>
Referer 和 user-agent 是請求頭,而不是響應頭。
這意味着它們是由瀏覽器或您的 ajax 調用(您可以修改值)發送的,並且它們在您獲得 HTTP 響應之前就已決定。
所以基本上你不是要求 HTTP 標頭,而是瀏覽器設置。
你從 document.referer 和 navigator.userAgent 得到的值可能不是實際的頭部,而是瀏覽器的設置。
從 JavaScript 獲取標頭的一種方法是使用 WebRequest API,它允許我們訪問源自 http 或 websockets 的不同事件,生命周期如下: WebRequest Lifecycle
所以為了訪問頁面的標題,它會是這樣的:
browser.webRequest.onHeadersReceived.addListener(
(headersDetails)=> {
console.log("Request: " + headersDetails);
},
{urls: ["*://hostName/*"]}
);`
問題是為了使用這個API,它必須從瀏覽器中執行,即瀏覽器對象指的是瀏覽器本身(標簽、圖標、配置),而瀏覽器確實可以訪問所有的Request和Reponse任何頁面,因此您必須向用戶詢問權限才能執行此操作(必須在清單中聲明權限,瀏覽器才能執行它們)
並且作為瀏覽器的一部分,您將失去對頁面的控制,也就是說,您不能再操作 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
我想谷歌會在服務器端抓取一些數據——記住,當一個頁面加載到你的瀏覽器中時,其中包含谷歌分析代碼,你的瀏覽器會向谷歌的服務器發出請求; Google 可以通過這種方式以及通過嵌入在頁面中的 JavaScript 來獲取數據。
var ref = Request.ServerVariables("HTTP_REFERER");
在引號內鍵入您想要的任何其他服務器變量名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.