Используя getAllResponseHeaders в объекте xhr, можно получить все заголовки ответов после вызова 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/
EDIT: Если вы хотите просто поймать заголовки на всех вызывает setRequestHeader в XMLHttpRequest, тогда вы можете просто обернуть этот метод. Это немного взломать, и, конечно же, вам нужно будет убедиться, что приведенный ниже код обертки функций запускается до того, как будет выполнен какой-либо запрос.
// 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
Вы просмотрели спецификацию XMLHttpRequest w3c http://www.w3.org/TR/2012/WD-XMLHttpRequest-20120117 Возможно, вы могли бы обернуть объект XMLHttpRequest, а затем захватить –
Да, кажется, что невозможно поймать заголовки запроса – Lwyrn
Что-то вы могли бы, чтобы это использовать 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
Зачем вам нужно знать, какие заголовки запросов были на клиенте? – Quentin
Это для цели отладки – Lwyrn
Почему бы не посмотреть заголовки запроса, когда они достигли сервера? Или использовать прокси, как Чарльз? – Quentin