Где находится HTML-код в структуре HTTP-ответа?

HTTP-ответ — это структурированное сообщение, которое веб-сервер отправляет браузеру в ответ на его запрос. Его можно сравнить с письмом в конверте:

  • Конверт и служебные пометки — это заголовки (headers).
  • Само письмо — это тело ответа (response body), где и находится HTML.

Структура HTTP-ответа (на примере HTTP/1.1 и HTTP/2):

  1. Строка статуса (Status Line): Первая строка. Содержит версию протокола, код статуса и его текстовое описание.
    • Пример: HTTP/1.1 200 OK
  2. Заголовки (Headers): Служебная информация в формате "Ключ: Значение". Они идут после строки статуса и управляют обработкой ответа.
    • Примеры важных заголовков:
      • Content-Type: text/html; charset=UTF-8критически важный заголовок, который сообщает браузеру, что тело ответа содержит HTML.
      • Content-Length: 1256 — указывает размер тела ответа в байтах.
      • Cache-Control: max-age=3600 — инструкции по кешированию.
  3. Пустая строка (Empty Line): Один обязательный перевод строки, который сигнализирует об окончании заголовков и начале тела.
  4. Тело ответа (Message Body): Необязательная, но в случае с веб-страницами — основная часть. Именно здесь находится HTML-код (а также CSS, JS, изображения в виде бинарных данных для других типов контента).

Пример "сырого" HTTP-ответа:

HTTP/1.1 200 OK
Date: Mon, 23 Jan 2023 15:04:05 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 132

<!DOCTYPE html>
<html>
<head><title>Пример страницы</title></head>
<body>
  <h1>HTML находится здесь!</h1>
</body>
</html>

Разбор примера:

  • Строки 1-4 — это заголовки.
  • Пустая строка после Content-Length: 132 — это разделитель.
  • Все, что после пустой строки (начиная с <!DOCTYPE html>), — это тело ответа (body), содержащее HTML-код.

Актуальность для современных стандартов HTTP

  • HTTP/1.1 и HTTP/2: Базовая структура (заголовки -> пустая строка -> тело) остается неизменной. В HTTP/2 сообщение разбивается на фреймы для эффективности, но логическая структура сохраняется.
  • HTTP/3 (основан на QUIC): Меняет транспортный протокол (с TCP на UDP), но семантика HTTP (структура запросов и ответов) та же. HTML по-прежнему находится в теле ответа.

HTML можно найти после пустой строки, следующей за заголовками HTTP-ответа. Заголовок Content-Type: text/html — явный индикатор того, что в теле будет именно HTML.