在xhr對象中使用getAllResponseHeaders,可以在ajax調用後獲取所有響應標頭。 但我找不到獲取請求標頭字符串的方法,這可能嗎?JS/jQuery獲取HTTPRequest請求標頭?
回答
如果這是出於調試目的,那麼您可以使用Firebug或Chrome開發人員工具(以及IE中調用的任何功能)來檢查從瀏覽器到服務器的網絡流量。
另一種方法是使用這樣的腳本:
$.ajax({
url: 'someurl',
headers:{'foo':'bar'},
complete: function() {
alert(this.headers.foo);
}
});
但是我覺得只有在headers
已經定義的報頭是可用的(不知道,如果頭被改變(例如在beforeSend會發生什麼) 。
你可以閱讀更多關於jQuery的AJAX位在:http://api.jquery.com/jQuery.ajax/
編輯:如果你想只捉對所有標題調用XMLHttpRequest上的setRequestHeader,然後你可以包裝該方法。這有點破解,當然你需要確保在任何請求發生之前運行下面的函數包裝代碼。
// Reasign the existing setRequestHeader function to
// something else on the XMLHtttpRequest class
XMLHttpRequest.prototype.wrappedSetRequestHeader =
XMLHttpRequest.prototype.setRequestHeader;
// Override the existing setRequestHeader function so that it stores the headers
XMLHttpRequest.prototype.setRequestHeader = function(header, value) {
// Call the wrappedSetRequestHeader function first
// so we get exceptions if we are in an erronous state etc.
this.wrappedSetRequestHeader(header, value);
// Create a headers map if it does not exist
if(!this.headers) {
this.headers = {};
}
// Create a list for the header that if it does not exist
if(!this.headers[header]) {
this.headers[header] = [];
}
// Add the value to the header
this.headers[header].push(value);
}
現在,一旦頭已經在一個XMLHttpRequest
實例設置,我們可以通過檢查xhr.headers
例如把他們救出來
var xhr = new XMLHttpRequest();
xhr.open('get', 'demo.cgi');
xhr.setRequestHeader('foo','bar');
alert(xhr.headers['foo'][0]); // gives an alert with 'bar'
如何在以前的評論中撰寫:我正在爲我的平臺編寫調試程序,因爲它可以幫助開發人員爲其開發額外的模塊。調試器捕獲所有ajax請求並顯示所有請求信息(響應頭,響應數據,url,狀態等)。我只想添加請求標題以獲得請求的完整視圖。我知道可以使用集成的瀏覽器調試工具,我只想給一個定製的工具。所以請求標頭不能被捕獲: – Lwyrn
你看過w3c XMLHttpRequest規範嗎?http://www.w3.org/TR/2012/WD-XMLHttpRequest-20120117也許你可以包裝XMLHttpRequest對象,然後捕獲如果它們正在被設置,那麼這些標題有點不一樣 –
是的,它似乎不可能趕上請求標題 – Lwyrn
您可以使用Sinon的FakeXMLHttpRequest替換瀏覽器的XHR。在this document中對如何使用它進行測試進行了描述,但我確信您可以將模塊用於調試目的。
你需要做的是:
var requests;
this.xhr = sinon.useFakeXMLHttpRequest();
this.xhr.onCreate = function(xhr) {
requests.push(xhr);
}
再後來,你可以檢查你的requests
數組頭:
console.log(requests[0].requestHeaders);
要訪問您的請求頭。
官方文檔:http://sinonjs.org/docs/#server – uglymunky
- 1. web.py獲取請求標頭
- 2. 獲取HttpRequest完整請求字符串
- 3. 從http請求獲取授權標頭
- 4. 獲取請求IP和標頭
- 5. Android只獲取http請求的標頭
- 6. 如何獲取所有請求標頭?
- 7. 從XHR獲取請求頭
- 8. 獲取ajax請求的請求標題
- 9. 請求HTTP標頭
- 10. HTTP請求標頭
- 11. 請求標頭和DOM中的欺騙請求標頭
- 12. 在javascript中讀取請求標頭
- 13. C#HttpRequest附加Cookie請求
- 14. 帶請求標頭的Powerbuilder GET請求
- 15. 如何從django rest框架請求獲取django HttpRequest?
- 16. 獲取原始請求頭在Django
- 17. Asp.net網頁API獲取請求頭
- 18. 獲取Urllib2.Request的請求頭文件?
- 19. PHP流 - 獲取所有HTTP請求頭
- 20. 獲取HTTP請求頭信息:Java
- 21. HttpRequest的標頭響應C#
- 22. 如何獲取API頭請求的請求ID和會話ID
- 23. AJAX請求 - 獲取HTTP代碼/響應頭成功請求
- 24. tcpDump在共享主機上獲取請求標頭
- 25. Django/Python如何獲取完整的請求標頭?
- 26. 在異步WebClient請求中獲取HTTP標頭
- 27. 從HTTP請求獲取自定義響應標頭
- 28. 如何在Rails中獲取「Origin」請求標頭
- 29. ASP.NET如何在請求中獲取自定義標頭?
- 30. 如何獲取PHP和NodeJS的相同請求標頭
爲什麼你需要知道客戶端上的請求頭是什麼? – Quentin
用於調試目的 – Lwyrn
爲什麼不在請求頭到達服務器時查看請求頭?或者使用Charles這樣的代理? – Quentin