Как посмотреть HTTP заголовки
HTTP протокол используется при открытии сайтов и скачивании файлов из Интернета. HTTP протокол работает по принципу запрос-ответ — от клиента приходит запрос и сервер отправляет ответ. Каждый запрос и каждый ответ состоит из элементов:
- Стартовая строка
- Заголовки
- Тело сообщения
Тело сообщения — это то, ради чего делается запрос — страница сайта или файл.
Заголовки — это метаинформация, которую мы обычно не видим.
В заголовках запроса могут быть такие данные как:
- предпочитаемые языки
- характеристика программы, которая делает запрос
- содержимое кукиз
- информация для сервера — для какого хоста предназначен запрос и прочее
В заголовках ответа могут быть такие данные как:
- кодировка присланного текста
- тип присланного контента (изображение, текст, архив и пр.)
- данные о ПО веб-сервера
- данные о кэшировании: ПО, используемое для кэширования, возраст присланных данных и прочее
Эта статья расскажет, как посмотреть HTTP заголовки.
Как в веб-браузере увидеть HTTP заголовки
Это самый простой способ, доступный в любой операционной системе.
Нажмите в веб-браузере F12 и откройте интересующую вас страницу. Перейдите на вкладку Network (сеть) и выберите интересующее вас подключение.
Вначале идут Заголовки ответа (Response Headers), а затем Заголовки запроса (Request Headers), хотя, конечно же, вначале отправляется запрос и его заголовки, а затем приходит ответ.
Это удобный метод, причём вам не нужно беспокоиться о HTTPS протоколе — поскольку веб-браузер является конечным адресатом, то он может показывать уже расшифрованные данные.
Как в cURL посмотреть HTTP заголовки
Для cURL есть опции -I, -v и -i, которые делают так, что эта утилита показывает HTTP заголовки.
Разница в том, что опция -I означает использовать метод HEAD, то есть в реальности кроме HTTP заголовков ничего не будет прислано. А опция -v делает вывод более вербальным, в результате в него включаются и заголовки. Но если вы отправляете запрос по HTTPS протоколу, то с опцией -v также будут показаны данные, относящиеся к TLS рукопожатию — они не имеют отношения к HTTP заголовкам. Ещё нужно знать, что опция -I показывает только заголовки ответа, а опция -v показывает и Заголовки запроса и Заголовки ответа.
Опция -i также показывает только заголовки ответа, не показывает TLS рукопожатие, но зато показывает всё тело ответа.
Пример использования метода HEAD:
Здесь «HTTP/1.1 200 OK» это строка статуса, а всё остальное — поля HTTP заголовка.
Пример вербального вывода:
Отправленные на веб сервер заголовки имеют в начале символ >, а полученные с веб-сервера строки начинаются на <.
Синей рамкой выделены стартовые строки (строка запроса и строка статуса), а красным HTTP заголовки.
Пример вывода заголовков вместе с телом сообщения:
С опцией -i HTTP заголовки выводятся в стандартный вывод, а с опцией -v заголовки выводятся в вывод ошибок.
HTTP заголовки в Wireshark (только для протокола HTTP, без HTTPS)
До сих пор мы программа, которая показывает HTTP заголовки и которая отправляет запросы и принимает ответы совпадали, поэтому даже при использовании протокола HTTPS мы видели расшифрованные данные. Но программа Wireshark не может расшифровывать протокол HTTPS, поэтому в ней можно просмотреть только заголовки для незашифрованного трафика.
Для поиска HTTP сообщений используйте фильтр
Заголовки запросов и ответов смотрите в «Hypertext Transfer Protocol»:
Преимущества Wireshark в том, что кроме просмотра HTTP заголовков, вы можете использовать гибкую и мощную систему фильтров для поиска по полям заголовка. Подробности смотрите в справочной статье «Фильтры Wireshark».
HTTP заголовки в Burp Suite
Программа Burp Suite содержит прокси специально для просмотра заголовков. Более того, в программе имеются функции по модификации заголовков и другого содержимого на лету. Но Burp Suite это профессиональная программа, требующая изучения.
Burp Suite умеет работать с запросами по HTTPS, но для этого требуется настройка SSL сертификатов в веб-браузере.
Смотрите также большую статью «HTTP протокол», которая содержит подробное, но написанное простым языком описание протокола.
И ещё смотрите близкую по теме статью: Как отобразить данные POST с cURL.
Русские Блоги
Представлен ранее«Анализ захвата пакетов Wireshark — протокол TCP / IP», И вот однажды меня кто-то спросил, пример — HTTP, если это HTTPS, можете ли вы его захватить и проанализировать? Из любопытства я проверил соответствующую информацию и поделился с вами некоторыми идеями. Прежде чем говорить о расшифровке HTTPS, давайте взглянем на разницу между HTTPS и HTTP. HTTPS добавляет протокол безопасного транспортного уровня между TCP / IP и HTTP. Этот протокол безопасного транспортного уровня обычно использует SSL или TLS, аналогично На следующем рисунке. То есть HTTPS = HTTP + SSL / TLS.

Протокол SSL разделен на уровень протокола записи SSL и уровень протокола установления связи SSL. SSLСоглашение о рукопожатииОснованный на протоколе записи SSL, он используется для связи обеих сторон до начала фактической передачи данных.Аутентификация, ПереговорыАлгоритм шифрования, Шифрование ExchangeКлючПодождите. Протокол записи SSL разделяет и сжимает блок данных, вычисляет код проверки сообщения, шифрует, инкапсулирует заголовок записи и передает его. Как показано на рисунке ниже, здесь он не раскрывается, и заинтересованные дети могут продолжить изучение.
Протокол прикладного уровня
Протокол установления связи SSL
Протокол записи SSL
Давайте сначала рассмотрим анализ HTTP-запросов, проводимый Wireshark, обычно щелкая правой кнопкой мыши выбранные данные и просматривая «Следить за потоком TCP».

Вы можете увидеть детали запроса.

Давайте посмотрим, как Wireshark анализирует данные HTTPS-запроса. Давайте сначала посмотрим на захват пакетов. В качестве примера возьмем доступ к домашней странице CSDN. Вы можете увидеть захваченный пакет данных следующим образом:

Судя по скриншотам, есть две «волшебные» вещи: (1) Хотя условие фильтрации установлено на SSL, результаты фильтрации полны TLS. Случайно обнаружены другие веб-сайты для захвата пакетов, и все они являются TLS. Ознакомившись с информацией, я обнаружил, что TLS основан на SSL V3.0. Алгоритм шифрования и алгоритм MAC у них разные, и само соглашение не сильно отличается. Протокол TLS также состоит из двух уровней: TLS Record и TLS Handshake. Нижний уровень — это протокол записи TLS. Игнорируйте различия протокола, а затем используйте TLS для анализа дешифрования. А теперь посмотрим на другой донгдон во весь экран. (2) Так много приветствий, так много приветствий клиента и приветствия сервера, что это? Это рукопожатие TLS. Вся фаза рукопожатия выглядит следующим образом, которую можно разделить на 5 шагов.
На первом этапе браузер сообщает номер версии протокола, случайное число, сгенерированное клиентом, и метод шифрования, поддерживаемый клиентом.
На втором этапе сервер подтверждает метод шифрования, используемый обеими сторонами, используемый номер версии TLS и случайное число.
Третья часть дает цифровой сертификат и параметры, сгенерированные сервером, на котором выполняется алгоритм Диффи-Хеллмана, например pubkey.
В четвертой части браузер получает pubkey, отправленный сервером, вычисляет другой pubkey и отправляет его на сервер.
В пятой части сервер отправляет браузеру билет сеанса.

Конкретный процесс рукопожатия можно проверить шаг за шагом с помощью захвата пакетов Wireshark. Я не буду здесь вдаваться в подробности. Давайте сосредоточимся на том, как использовать Wireshark для расшифровки данных. После того, как рукопожатие завершено, данные захвата Wireshark, которые мы получили сейчас, по-прежнему являются всевозможными материалами TLSv1.2, которые все являются зашифрованными данными.

Введение в метод дешифрования. Я думаю, что самым простым является дешифрование данных с помощью симметричного ключа, используемого в сеансе TLS, сохраненном браузером. После того, как браузер получит данные, он будет использовать секретный ключ для дешифрования данных. Некоторые браузеры будут где-то хранить этот ключ. Мы можем расшифровать данные, если получим сеансовый ключ в браузере. В качестве примера возьмем систему Windows + браузер Chrome. Сначала экспортируйте ключ, хранящийся в браузере. С помощью переменных среды расширенных системных настроек свойств компьютера создайте новую переменную с именем "SSLKEYLOGFILE", значение переменной — это экспортированный ключ. Конкретный адрес файла.

После настройки вы можете открыть любой URL-адрес HTTPS через браузер Chrome. В это время проверьте путь, соответствующий значению переменной, и был создан sslkey.log.

Ключ успешно экспортирован в локальный. Теперь вы можете применить ключ к Wireshark. Конкретный путь следующий: строка меню Правка —— Настройки —— Протоколы —— SSL (обратите внимание, что это SSL или TLS, здесь это SSL, отдельной опции TLS нет), выберите настройку прямо сейчас в (Pre) -Master-Secret имя файла журнала Значение переменной.

Настройка завершена, видим эффект:

Посмотрите, что есть HTTP, до TLSv1.2. В то же время под WireShark будет метка «Расшифрованные данные SSL», которая является меткой расшифрованных данных SSL. Щелкнув ее, вы можете увидеть информацию о расшифрованном пакете TLS, как показано на рисунке выше.
Думаете, это слишком некрасиво? Хорошо, вы также можете использовать правую кнопку мыши, чтобы выбрать «Follow SSL Stream» в строке меню, например HTTP, чтобы просмотреть полные данные расшифрованного запроса HTTPS.


Кроме того, выше есть много вещей TLSv1.2, таких как client_key_exchange, Session Ticket, которые являются четвертым и пятым этапами процесса установления связи TLS, упомянутыми изначально, а не содержимым пакета запроса. Так что не удивляйтесь, увидев то, что кажется незашифрованным.

Подарочный пакет для нового пользователя NetEase Cloud:https://www.163yun.com/gift
Эта статья написана сообществом практикующих Netease и опубликована с разрешения автора Ли Ли.
Как посмотреть HTTP заголовки (headers)

При отладке работы веб-сервера, может возникнуть необходимость посмотреть HTTP заголовки ответа, которые отдает какая-либо страница сайта посетителю. В данной статье будут рассмотрены несколько простых способов, как это можно сделать.
С помощью онлайн сервиса
Если вам нужно быстро посмотреть заголовки какой-либо страницы, то это можно сделать с помощью онлайн сервисов. Для примера, это можно сделать здесь:
Вбиваем нужную страниц сайта и жмем кнопку ‘submit’ в итоге получаем следующую страницу с заголовками:

С помощью curl
Если в вашей системе установлен curl, то с его помощью можно без проблем посмотреть заголовки ответа (Response Headers), полученные от веб-сервера. Для этого достаточно запустить curl со следующими параметрами:
После чего мы получим вот такой вот вывод:
С помощью браузера
Практически все современные браузеры позволяют посмотреть заголовки.
Firefox
Открываем нужную страницу, нажимаем F12 и открываем консоль. Далее, в консоли выбираем логирование «Запросов» и обновляем страницу, после этого, можно будет посмотреть заголовки: 
[решено] php curl https запрос как правильно
Собственно параметры CURL для работы с SSL:
CURLOPT_SSL_VERIFYPEER — если поставить его в 0, то удалённый сервер не будет проверять наш сертификат. В противном случае необходимо этот самый сертификат послать.
CURLOPT_CAINFO — указывать файл сертификата, если CURLOPT_SSL_VERIFYPEER установлен в 1.
CURLOPT_SSLVERSION — целое число, указывает версию SSL (2 или 3), обычно определяется автоматически.
CURLOPT_SSL_VERIFYHOST — будет ли производиться проверка имени удалённого сервера, указанного в сертификате. Если установить значение «2», то будет произведена ещё и проверка соответствия имени хоста. (если честно, я так и не понял что делает этот флаг)
И самый простой способ CURLOPT_SSL_VERIFYPEER поставить в 0
ПРИМЕР:
$postfields = array(‘field1’=>’value1’, ‘field2’=>’value2’);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, ‘https://foo.com’);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, 1);
// Edit: prior variable $postFields should be $postfields;
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // On dev server only!
$result = curl_exec($ch);
Значение остальных параметров:
CURLOPT_URL — это URL запроса.
CURLOPT_POST — говорим, что будем посылать POST запрос.
CURLOPT_POSTFIELDS — собственно POST переменыые.
CURLOPT_RETURNTRANSFER — вернуть результат запроса, а не выводить в браузер.
А вот что написано в хелпе: http://php.net/manual/en/function.curl-setopt.php#110457
Please everyone, stop setting CURLOPT_SSL_VERIFYPEER to false or 0. If your PHP installation doesn’t have an up-to-date CA root certificate bundle, download the one at the curl website and save it on your server:
Then set a path to it in your php.ini file, e.g. on Windows:
Turning off CURLOPT_SSL_VERIFYPEER allows man in the middle (MITM) attacks, which you don’t want!
Что означет не использовать, тот метод что я описал выше CURLOPT_SSL_VERIFYPEER, а обновить CA root certificate bundle и прописать путь к сертификату: curl.cainfo
Если вы хотите посмотреть как выглядит HTTP \ HTTPS запрос который вы отправляете в браузере, то поставьте в chrome расширение Advanced REST client
Еще небольшой пример как работать curl впринципи в php:
/**
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an
* array containing the HTTP server response header fields and content.
*/
function get_web_page( $url )
<
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don’t return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => «», // handle all encodings
CURLOPT_USERAGENT => «spider», // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header[‘errno’] = $err;
$header[‘errmsg’] = $errmsg;
$header[‘content’] = $content;
return $header;
>
This sample function takes a URL argument and returns an associative array containing the server header and content. The CURL functions automatically handle DNS lookups, redirects, cookies, and file decompression.
Header values are described in the curl_getinfo() manual. Highlights include:
«url» the final page URL after redirects
«content_type» the content type (e.g. «text/html; charset=utf-8»)
«http_code» the page status code (e.g. «200» on success)
«filetime» the date stamp on the remote file
This function adds::
«errno» the CURL error number (0 on success)
«errmsg» the CURL error message for the error number
«content» the page content (e.g. HTML text, image bytes, etc.)
On success, «errno» is 0, «http_code» is 200, and «content» contains the web page.
On an error with a bad URL, unknown host, timeout, or redirect loop, «errno» has a non-zero error code and «errmsg» has an error message (see the CURL error code list).
On an error with a missing web page or insufficient permissions, «errno» is 0, «http_code» has a non-200 HTTP status code, and «content» contains the site’s error message page (see the Wikipedia List of HTTP status codes).
This function can be extended to support GET and POST for web forms, file uploads, logins, SSL for encrypted web pages, and access through proxy servers.