Как получить доступ к заголовкам HTTP-ответа страницы через JavaScript?
Связанный с этим вопросом , который был изменен, чтобы спросить о доступе к двум определенным заголовкам HTTP.
Связанный:
Как я могу получить доступ к полям заголовка запроса HTTP через JavaScript?
javascript
http
http-headers
keparo
источник
источник
Ответы:
Невозможно прочитать текущие заголовки. Вы можете сделать еще один запрос к тому же URL и прочитать его заголовки, но нет никакой гарантии, что заголовки точно совпадают с текущими.
Используйте следующий код JavaScript, чтобы получить все заголовки HTTP, выполнив
get
запрос:источник
К сожалению, нет API, который бы предоставил вам заголовки ответа HTTP для вашего начального запроса страницы. Это был оригинальный вопрос, размещенный здесь. Это также неоднократно задавалось , потому что некоторые люди хотели бы получить фактические заголовки ответа исходного запроса страницы без выдачи другого.
Для запросов AJAX:
Если HTTP-запрос сделан через AJAX, можно получить заголовки ответа с помощью
getAllResponseHeaders()
метода. Это часть API XMLHttpRequest. Чтобы увидеть, как это можно применить, проверьтеfetchSimilarHeaders()
функцию ниже. Обратите внимание, что это обходной путь, который не будет надежным для некоторых приложений.API был указан в следующей рекомендации кандидата для XMLHttpRequest: XMLHttpRequest - Рекомендация кандидата W3C 3 августа 2010 г.
В частности,
getAllResponseHeaders()
метод был указан в следующем разделе: w3.org:XMLHttpRequest
:getallresponseheaders()
методДокументация MDN это тоже хорошо: developer.mozilla.org:
XMLHttpRequest
.Это не даст вам информацию о заголовках HTTP-ответа исходного запроса страницы, но ее можно использовать для обоснованного предположения о том, какими были эти заголовки. Подробнее об этом описано далее.
Получение значений заголовка из запроса начальной страницы:
Этот вопрос впервые был задан несколько лет назад, в частности, о том, как получить исходные заголовки ответа HTTP для текущей страницы (то есть той же самой страницы, внутри которой выполнялся JavaScript). Это совсем другой вопрос, чем просто получение заголовков ответов для любого HTTP-запроса. Для начального запроса страницы заголовки не всегда доступны для javascript. Будут ли значения заголовка, которые вам нужны, будут надежными и достаточно согласованными, если вы снова запросите ту же страницу через AJAX, будет зависеть от вашего конкретного приложения.
Ниже приведены несколько предложений по решению этой проблемы.
1. Запросы на ресурсы, которые в значительной степени статичны
Если ответ в значительной степени статичен, а заголовки не должны сильно меняться между запросами, вы можете сделать AJAX-запрос для той же страницы, на которой вы сейчас находитесь, и предположить, что это те же значения, которые были частью этой страницы. HTTP ответ. Это может позволить вам получить доступ к нужным заголовкам, используя красивый API XMLHttpRequest, описанный выше.
Такой подход будет проблематичным, если вам действительно придется полагаться на значения, согласованные между запросами, поскольку вы не можете полностью гарантировать, что они одинаковы. Это будет зависеть от вашего конкретного приложения и от того, знаете ли вы, что нужное вам значение не будет меняться от одного запроса к другому.
2. Сделайте выводы
Существуют некоторые свойства спецификации (объектная модель браузера), которые браузер определяет, просматривая заголовки. Некоторые из этих свойств напрямую отражают заголовки HTTP (например, для
navigator.userAgent
него установлено значениеUser-Agent
поля заголовка HTTP ). Обнюхивая доступные свойства, вы можете найти то, что вам нужно, или некоторые подсказки, чтобы указать, что содержится в HTTP-ответе.3. Спрятать их
Если вы контролируете серверную часть, вы можете получить доступ к любому заголовку, который вам нравится, когда вы создаете полный ответ. Значения могут быть переданы клиенту со страницей, сохранены в некоторой разметке или, возможно, во встроенной структуре JSON. Если вы хотите, чтобы каждый заголовок HTTP-запроса был доступен для вашего javascript, вы можете перебирать их на сервере и отправлять обратно как скрытые значения в разметке. Вероятно, не стоит отправлять значения заголовков таким образом, но вы, безусловно, можете сделать это для нужного вам значения. Это решение, возможно, тоже неэффективно, но оно будет работать, если вам это нужно.
источник
Используя
XmlHttpRequest
вы можете открыть текущую страницу, а затем изучить http заголовки ответа.В лучшем случае нужно просто сделать
HEAD
запрос, а затем изучить заголовки.Некоторые примеры этого можно найти на сайте http://www.jibbering.com/2002/4/httprequest.html.
Просто мои 2 цента.
источник
Решение с сервисными работниками
Сервисные работники могут получить доступ к сетевой информации, включая заголовки. Хорошая часть заключается в том, что он работает с любыми запросами, а не только с XMLHttpRequest.
Как это работает:
fetch
запрос с помощьюrespondWith
функции.postMessage
функцией.Рабочий пример:
Работники сферы обслуживания немного сложны для понимания, поэтому я создал небольшую библиотеку, которая делает все это. Он доступен на github: https://github.com/gmetais/sw-get-headers .
Ограничения:
источник
Для тех, кто ищет способ разобрать все заголовки HTTP в объект, доступ к которому можно получить как словарь
headers["content-type"]
, я создал функциюparseHttpHeaders
:источник
Другой способ отправить информацию заголовка в JavaScript - использовать куки. Сервер может извлекать любые необходимые ему данные из заголовков запросов и отправлять их обратно в
Set-Cookie
заголовок ответа - и файлы cookie можно читать в JavaScript. Однако, как говорит Кепаро, лучше сделать это только для одного или двух заголовков, а не для всех них.источник
Если мы говорим о заголовках запроса , вы можете создавать свои собственные заголовки при выполнении XmlHttpRequests.
источник
Вы не можете получить доступ к заголовкам http, но некоторая информация, предоставленная в них, доступна в DOM. Например, если вы хотите увидеть http referer (sic), используйте document.referrer. Могут быть и другие подобные заголовки http. Попробуйте поискать нужную вещь, например, «http referer javascript».
Я знаю, что это должно быть очевидно, но я продолжал искать такие вещи, как «http заголовки javascript», когда все, что я действительно хотел - это реферер, и не получил никаких полезных результатов. Я не знаю, как я не понимал, что могу сделать более конкретный запрос.
источник
Как и многие люди, я копался в сети без реального ответа :(
Тем не менее, я нашел обходной путь, который мог бы помочь другим. В моем случае я полностью контролирую свой веб-сервер. На самом деле это часть моего приложения (см. Конец ссылки). Мне легко добавить скрипт в мой http-ответ. Я изменил свой httpd-сервер, чтобы внедрить небольшой скрипт в каждую html-страницу. Я только нажимаю на дополнительную строку «js script» сразу после создания моего заголовка, который устанавливает существующую переменную из моего документа в моем браузере [я выбираю местоположение], но возможен любой другой вариант. Хотя мой сервер написан на nodejs, я не сомневаюсь, что эту же технику можно использовать из PHP или других.
Теперь на каждой html-странице, загруженной с моего сервера, этот скрипт выполняется браузером при получении. Затем я могу легко проверить из JavaScript, существует ли переменная или нет. В моем сценарии использования мне нужно знать, должен ли я использовать профиль JSON или JSON-P, чтобы избежать проблемы с CORS, но эту же технику можно использовать для других целей [то есть: выбрать между сервером разработки / производства, получить с сервера REST / API ключ и т.д ....]
В браузере вам просто нужно проверить переменную непосредственно из JavaScript, как в моем примере, где я использую ее для выбора своего профиля Json / JQuery
Для тех, кто когда-либо хотел бы проверить мой код: https://www.npmjs.org/package/gpsdtracking
источник
Используя mootools, вы можете использовать this.xhr.getAllResponseHeaders ()
источник
Я только что проверил, и это работает для меня, используя Chrome версии 28.0.1500.95.
Мне нужно было скачать файл и прочитать имя файла. Имя файла находится в заголовке, поэтому я сделал следующее:
Вывод:
источник
Это мой скрипт для получения всех заголовков ответа:
Наличие в результате заголовков ответа.
Это сравнительный тест с использованием Hurl.it:
источник
Чтобы получить заголовки как более удобный объект (улучшение ответа Раджи ):
источник
Ссылка Аллена Лалонда сделала мой день. Просто добавив несколько простых рабочих HTML-код здесь.
Работает с любым разумным браузером, начиная с возраста плюс IE9 + и Presto-Opera 12.
Примечание: вы получаете заголовки второго запроса, результат может отличаться от исходного запроса.
Другой способ
- более современный
fetch()
APIhttps://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
Per caniuse.com , поддерживаемый Firefox 40, Chrome 42, Edge 14, Safari 11.
Рабочий пример код:
источник
Это старый вопрос. Не уверен , что, когда поддержка стала более широкой, но
getAllResponseHeaders()
и по всейgetResponseHeader()
видимости, теперь будет достаточно стандартны: http://www.w3schools.com/xml/dom_http.aspисточник
Как уже упоминалось, если вы контролируете серверную часть, тогда должна быть возможность отправлять начальные заголовки запроса клиенту в первоначальном ответе.
В Express, например, работает следующее:
app.get('/somepage', (req, res) => { res.render('somepage.hbs', {headers: req.headers}); })
Затем заголовки доступны в шаблоне, поэтому могут быть скрыты визуально, но включены в разметку и считаны клиентским JavaScript.источник
Я думаю, что вопрос пошёл не так, как надо. Если вы хотите получить заголовок запроса из JQuery / JavaScript, ответ просто нет. Другие решения - создать страницу aspx или страницу jsp, тогда мы можем легко получить доступ к заголовку запроса. Возьмите все запросы на странице aspx и поместите их в сеанс / файлы cookie, чтобы получить доступ к файлам cookie на странице JavaScript.
источник