На жаль, не існує API, який би надав заголовки відповідей HTTP для вашого початкового запиту на сторінку. Це було оригінальне запитання, розміщене тут. Це також неодноразово запитували , тому що деякі люди хотіли б отримати фактичні заголовки відповідей на початковий запит сторінки, не видаючи іншого.
Для запитів AJAX:
Якщо HTTP-запит зроблено через AJAX, можна отримати заголовки відповідей getAllResponseHeaders()
методом. Це частина API XMLHttpRequest. Щоб побачити, як це можна застосувати, перегляньте fetchSimilarHeaders()
функцію нижче. Зауважте, що це вирішення проблеми, яка не буде надійною для деяких програм.
myXMLHttpRequest.getAllResponseHeaders();
Це не дасть вам інформації про заголовки відповідей HTTP-запиту на оригінальній сторінці, але це може бути використане для того, щоб вчитись про те, якими були ці заголовки. Детальніше про це описано далі.
Отримання значень заголовка із запиту початкової сторінки:
Це питання вперше було задано кілька років тому, конкретно розпитуючи про те, як отримати вихідні заголовки відповідей HTTP для поточної сторінки (тобто тієї самої сторінки, в якій працює JavaScript). Це зовсім інше питання, ніж просто отримання заголовків відповідей на будь-який HTTP-запит. Для початкового запиту сторінки заголовки недоступні для JavaScript. Чи потрібні вам значення заголовка будуть надійними та достатньо послідовними, якщо ви знову запитаєте ту саму сторінку через AJAX, залежатиме від вашої конкретної програми.
Нижче наведено кілька пропозицій щодо подолання цієї проблеми.
1. Запити на ресурси, які в основному є статичними
Якщо відповідь значною мірою статична, і не слід очікувати, що заголовки сильно змінюватимуться між запитами, ви можете зробити запит AJAX для тієї самої сторінки, на якій ви зараз перебуваєте, і припустити, що вони є тими самими значеннями, що були частиною сторінки HTTP-відповідь. Це може дозволити вам отримати доступ до потрібних заголовків, використовуючи приємний API XMLHttpRequest, описаний вище.
function fetchSimilarHeaders (callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === XMLHttpRequest.DONE) {
//
// The following headers may often be similar
// to those of the original page request...
//
if (callback && typeof callback === 'function') {
callback(request.getAllResponseHeaders());
}
}
};
//
// Re-request the same page (document.location)
// We hope to get the same or similar response headers to those which
// came with the current page, but we have no guarantee.
// Since we are only after the headers, a HEAD request may be sufficient.
//
request.open('HEAD', document.location, true);
request.send(null);
}
Цей підхід буде проблематичним, якщо вам справді доведеться покладатися на значення, що відповідають запитам, оскільки ви не можете повністю гарантувати їх однаковість. Це залежатиме від вашої конкретної програми та від того, чи знаєте ви, що потрібне вам значення - це те, що не змінюватиметься від одного запиту до іншого.
2. Зробіть умовиводи
Є деякі властивості BOM (Модель об’єкта браузера), які браузер визначає, переглядаючи заголовки. Деякі з цих властивостей безпосередньо відображають заголовки HTTP (наприклад navigator.userAgent
, встановлюється значення User-Agent
поля заголовка HTTP ). Обнюхуючи доступні властивості, ви зможете знайти те, що вам потрібно, або деякі підказки, щоб вказати, що містила відповідь HTTP.
3. Приховуйте їх
Якщо ви керуєте стороною сервера, ви можете отримати доступ до будь-якого заголовка, який вам подобається, коли будуєте повну відповідь. Значення можуть бути передані клієнту зі сторінкою, зафіксовані в якійсь розмітці або, можливо, в накресленій структурі JSON. Якщо ви хочете, щоб кожен заголовок HTTP-запиту був доступний вашому javascript, ви можете повторити їх на сервері та відправити їх назад як приховані значення в розмітці. Напевно, не ідеально відправляти значення заголовка таким чином, але ви, безумовно, можете це зробити для конкретного значення, яке вам потрібно. Це рішення, напевно, також неефективно, але воно зробить роботу, якщо вам це потрібно.