簡體   English   中英

如何通過 JavaScript 訪問 HTTP 請求標頭字段?

[英]How do I access the HTTP request header fields via JavaScript?

我想在客戶端 JavaScript 中捕獲 HTTP 請求標頭字段,主要是 Referer 和 User-Agent。 我如何訪問它們?


Google Analytics 設法通過 JavaScript 獲取您嵌入頁面中的數據,因此這絕對是可能的。

有關的:
在 JavaScript 中訪問網頁的 HTTP 標頭

如果您想訪問引用者和用戶代理,它們可用於客戶端 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM