[英]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.