簡體   English   中英

在 XMLHttpRequest 中獲取 SENT 標頭

[英]get SENT headers in an XMLHttpRequest

嘗試從 XHR object 獲取請求標頭,但沒有運氣,是否存在該 object 的隱藏方法或屬性將公開瀏覽器發送的標頭?

我已經知道如何設置自定義請求標頭並查看響應標頭,我正在尋找發送的所有請求標頭的列表,由瀏覽器創建的標頭和我的自定義標頭。

我正在使用 webkit/chrome,不關心其他瀏覽器。

編輯:我不想監視請求,我正在構建一個 web 應用程序,我需要列出這些標題並在應用程序中顯示它們,請不要告訴我有關提琴手、螢火蟲和 chrome 工具的信息,這不是什么我在找。

XMLHttpRequest API中沒有方法來獲取發送的請求標頭 有一些方法只能獲取響應頭,並設置請求頭。

您必須讓服務器回顯標頭,或使用像Wireshark這樣的數據包嗅探器。

嘗試使用Fiddler Web Debugger。

http://www.fiddler2.com/fiddler2/

您可以捕獲在任何瀏覽器中發送的請求,也可以檢查請求標頭,響應標頭,甚至復制捕獲發送的請求並將其作為您自己的請求發送出去。

顧名思義,發送的標頭是 SENT,(duh)。 並且 XMLHttpRequest class 不會將發送的標頭存儲在 RAM 中或將發送的標頭放在 XMLHttpRequest 的實例中......這對性能有好處。

如果你想獲取已經發送的headers,你需要做的就是創建一個日志機制。

並且由於自定義請求 header 是通過XMLHttpRequest.prototype.setRequestHeader()創建的,所以需要攔截XMLHttpRequest.prototype.setRequestHeader()

var sentHeaders = {}
var originalXMLHttpRequest_setRequestHeader = XMLHttpRequest.prototype.setRequestHeader;

XMLHttpRequest.prototype.setRequestHeader = function(header, value) {
    sentHeaders[header] = value;
    originalXMLHttpRequest_setRequestHeader.call(this, header, value);
}

就這樣。 不需要外部庫或 Wireshark。 全部在 Javascript 內完成;

只要確保上面的攔截代碼在任何 XMLHttpRequest 初始化之前執行。

附言。 這段代碼顯然只會攔截通過setRequestHeader()創建的自定義 header 。 XMLHttpRequest 本身會設置一些無法通過此方法訪問的默認標頭。

假設您正在使用jQuery,並且您正在尋找附加的任何內容,但可能沒有發送所有標頭,這可能有所幫助。 不確定它是否滿足您的確切需求,(因為瀏覽器傾向於添加自己的東西),但如果您需要首先獲取自己的標題,這可以工作:

$.ajaxSetup({
    beforeSend: function (jqXHR, settings) {
        if(!(settings.headers && settings.headers.token)) {
            //no token header was set, so set the request header
            jqXHR.setRequestHeader('token', newtoken);
        }
    }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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