Разбор HTTP-запроса и ответа

Разбор сырого HTTP-сообщения: метод, адрес, параметры, заголовки с пояснениями (Authorization, Cookie, Cache-Control), тело и типичные ошибки.

Данные обрабатываются в браузере и никуда не отправляются

Ввод

Перетащите файл сюда или выберите на диске

Результат

Здесь появится результат

Введите данные слева - результат появится сразу

Как пользоваться

Вставьте сырое HTTP-сообщение - запрос (GET /path HTTP/1.1) или ответ (HTTP/1.1 200 OK) с заголовками, пустой строкой и телом: разбор появляется сразу. Инструмент покажет метод с пояснением (безопасный ли, идемпотентный ли), путь и параметры в раскодированном виде, код ответа с описанием, все заголовки с расшифровкой и тело (JSON форматируется, поля формы раскладываются в таблицу). Такой текст можно взять из curl -v, Wireshark, логов прокси, DevTools браузера (Copy as cURL) или из документации API.

Для популярных заголовков есть подробный разбор: Authorization (Basic раскодируется, у Bearer-токена JWT показывается алгоритм и срок), Cookie и Set-Cookie (атрибуты безопасности), Cache-Control (каждая директива), Accept (приоритеты), Content-Type (кодировка, boundary), даты, ETag, Retry-After. Предупреждения подсказывают типичные ошибки: нет Host, неверный Content-Length, тело у GET, конфликт Content-Length и Transfer-Encoding.

Частые ошибки

Вот что чаще всего «ломает» HTTP-запросы:

Нет заголовка Host

В HTTP/1.1 заголовок Host обязателен: по нему сервер понимает, какому из сайтов на одном IP адресован запрос. Без него сервер отвечает 400.

Content-Length не совпадает с телом

Если указано больше, чем отправлено, сервер ждёт недостающие байты и зависает до таймаута, если меньше - «лишнее» принимает за следующий запрос. Для CRLF в теле считайте по два байта на перенос.

Нет Content-Type у запроса с телом

Сервер не знает формат тела и отвечает 415 или 400. Для JSON нужен application/json, для формы - application/x-www-form-urlencoded, для файлов - multipart/form-data с boundary.

Пробел перед двоеточием в заголовке

Запись «Host : example.com» недопустима: имя заголовка должно идти вплотную к двоеточию. Серверы по стандарту отвечают на неё 400, а лояльные прокси могут трактовать её по-разному.

Неверные символы в cookie и заголовках

Пробелы, двоеточия и точка с запятой в значениях cookie, а также переносы строк в заголовках приводят к обрезанию или отказу. Значения с такими символами кодируйте (например, процентным кодированием).

Секреты в заголовках логов

Authorization, Cookie и Set-Cookie содержат токены и сессии. Не публикуйте полные запросы в чатах и тикетах: удаляйте или заменяйте значения. Basic-авторизация расшифровывается за секунду.

Частые вопросы

Отправляются ли мои запросы на сервер?

Нет - 100%. Сайт целиком статический, у него нет серверной части. Разбор выполняется в вашем браузере, поэтому можно вставлять реальные запросы с заголовками.

Откуда взять сырой HTTP-запрос?

Из curl -v (строки со стрелкой > - запрос, < - ответ), из DevTools браузера (Network - Copy - Copy as cURL, а затем curl -v), из логов прокси и шлюза API, из Wireshark или mitmproxy, из документации API. Вставляйте стартовую строку, заголовки, пустую строку и тело.

Чем отличается запрос от ответа?

Запрос начинается с метода и адреса (POST /orders HTTP/1.1), ответ - с версии протокола и кода (HTTP/1.1 201 Created). Дальше в обоих случаях идут заголовки, пустая строка и необязательное тело.

Зачем нужна пустая строка между заголовками и телом?

Это разделитель: всё до неё - заголовки, всё после - тело. Если пустой строки нет, а после заголовков идёт текст, инструмент примет его за заголовок и покажет ошибку.

Что значит Transfer-Encoding: chunked?

Тело передаётся кусками, и его длина заранее неизвестна: перед каждым куском указан его размер. Одновременно с Content-Length такой заголовок нельзя указывать. Инструмент показывает тело как есть, не склеивая куски.

Безопасно ли вставлять сюда токены?

Данные не уходят из браузера, но токены в заголовках - секрет. Для публикации примеров заменяйте их заглушками. Инструмент намеренно показывает расшифровку Basic, чтобы было видно, как мало она защищает.

Чем HTTP/2 отличается в записи?

В HTTP/2 заголовки передаются в двоичном виде и сжимаются, а имена пишутся строчными буквами. Показываемый здесь текст - это удобная запись того же сообщения, как её выводят DevTools и curl, поэтому HTTP/2 вставлять можно.

Похожие инструменты

Курс «Проектирование API и интеграций»

Глубокое погружение в REST, gRPC, SOAP, проектирование баз данных и брокеры сообщений (Kafka, RabbitMQ). Делегирование рутины нейросетям (ИИ). Перестанете бояться технических собеседований и начнете говорить с разработчиками на одном языке. Курс собран так, чтобы пробить зарплатный потолок и вырасти в грейде - ученики тому подтверждение.

Перейти к курсу на Stepik