Как устроен HTTP-запрос и его основные части
Что проверяют
Знаете ли вы структуру сообщения по частям и понимаете ли назначение основных заголовков. Часто просят разобрать реальный запрос из вкладки сети.
Как отвечать
Запрос состоит из трёх частей.
Строка запроса: метод, путь с параметрами и версия протокола.
GET /jobs?search=go&page=2 HTTP/1.1Заголовки, по одному на строку:
Host: домен, обязателен в HTTP/1.1, на одном адресе живут разные сайты;User-Agent: клиент;AcceptиAccept-Encoding: какие форматы и какое сжатие клиент понимает;AuthorizationилиCookie: кто спрашивает;Content-TypeиContent-Length: что в теле и сколько его;Cache-ControlиIf-None-Match: работа с кэшем.
Тело: у POST, PUT и PATCH, обычно JSON или форма. Отделено от заголовков пустой строкой. У GET тела нет.
Ответ устроен так же: строка статуса вместо строки запроса (HTTP/1.1 200 OK), заголовки, тело.
Полезно добавить, что в HTTP/2 и HTTP/3 текстовых строк уже нет: заголовки передаются в бинарном виде и сжимаются, а несколько запросов идут по одному соединению параллельно. Модель сообщения при этом та же.
Где спотыкаются
Путают параметры запроса и тело, предлагают передавать пароль в строке адреса.
Не знают, зачем нужен Host, хотя без него не работает виртуальный хостинг.
Считают, что заголовки регистрозависимы.
Не могут назвать ни одного заголовка кэширования, а это первое, чем чинят лишние запросы.