HTTP задаёт семантику обмена запросами и ответами. В HTTP/1.1 сообщение содержит стартовую строку, заголовки, пустую строку и при необходимости тело. Запрос указывает метод и цель, ответ — код состояния. HTTP/2 и HTTP/3 передают ту же основную семантику другим, двоичным способом. Stateless не запрещает приложению хранить сессии.
Что такое HTTP и из чего состоят запрос и ответ?
Стартовая строка, заголовки и необязательное тело в HTTP/1.1. Чем кодирование HTTP/2 и HTTP/3 отличается от текстового примера.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
HTTP — протокол прикладного уровня для взаимодействия с ресурсами. Клиент отправляет запрос, сервер возвращает ответ; между ними могут быть посредники.
В HTTP/1.1 запрос включает метод, цель запроса и версию в стартовой строке. У ответа в стартовой строке — версия и код состояния. Далее идут заголовки, пустая строка и, если предусмотрено, тело.
Пример запроса:
GET /health HTTP/1.1
Host: example.com
Accept: text/plain
Пример ответа с телом из двух ASCII-байтов OK, без завершающего перевода строки в теле:
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 2
OK
В реальном HTTP/1.1 строки разделены CRLF. Content-Length измеряется в байтах, не в символах. Тело не обязательно: например, ответ 204 его не содержит. Формат и правила определения длины описаны в RFC 9112.
Текстовый пример не является форматом байтов HTTP/2 или HTTP/3: там используются кадры и псевдозаголовки, а HTTP/3 работает поверх QUIC. При этом понятия метода, статуса, заголовков и содержимого сохраняются.
Stateless означает отсутствие обязательного состояния диалога на уровне семантики протокола, а не запрет серверу хранить пользовательские данные. Сессии, cookies и токены реализуют прикладное состояние. HTTPS добавляет защищённый транспорт и проверку сервера, а не отдельный набор HTTP-методов.