Кратко

  • HTTP/1.0 мог отправить путь по TCP, но адрес назначения не сохранял для Web-сервера DNS-имя, выбранное клиентом.
  • HTTP/1.1 потребовал Host, чтобы путь принадлежал правильному пространству ресурсов и несколько сайтов могли делить один IP.
  • Абсолютный request-target также несёт authority, поэтому стандарты определили приоритет, переписывание proxy и отказ при отсутствии, дубликате или неверном Host.

Адрес и косая черта

RFC 1945 зафиксировал обычный HTTP/1.0. Клиент разрешал имя, открывал TCP и часто посылал только путь. При одном сайте на адрес GET / казался достаточным: соединение неявно выбирало единственный корень.

Когда несколько имён ведут к одной IP, это исчезает. DNS-запрос не входит в TCP-поток. Сервер получает адрес и порт, но не исходную метку. На общем endpoint один / относится к разным сайтам.

Host вернул authority в сообщение

RFC 2068 в 1997 году обязал HTTP/1.1 передавать Host. Прямой запрос несёт путь и query в строке, а сетевое местоположение — в Host. Точная ресурсная цель складывается из обоих.

Отсутствие Host требовало 400. Спецификация назвала целью несколько сайтов на IP и возврат адресов, выделенных только для различения Web-имён.

Host сообщает намерение, но не доказывает владение. Origin обязан проверить, обслуживает ли он эту authority.

Две authority требовали победителя

Origin-form обычно содержит путь. Absolute-form для proxy уже включает scheme, host и path. Если абсолютная URI говорит одно, а Host другое, сообщение указывает две цели.

RFC 2068 дал приоритет URI. RFC 7230 потребовал от proxy заменить Host authority из request-target. Конфликт должен закончиться на посреднике.

Нет Host, несколько строк или неверное значение — 400. Выбор первой или последней копии позволил бы proxy, cache и origin разойтись по сайтам.

Эффективная цель строится

RFC 7230 называет результат effective request URI. В установленном порядке участвуют конфигурация, контекст соединения, форма target и Host. Путь получает смысл только внутри authority.

User agent объявляет, proxy нормализует, origin проверяет и выбирает virtual host. Cache key и redirect должны следовать тому же решению. RFC предупреждает о непроверенном Host во внутренней маршрутизации и общем кеше.

Риск создаёт реальная власть поля: значение от запрашивающей стороны выбирает адресата приложения.

Формат изменился, единственность осталась

RFC 9112 сохраняет один валидный Host в HTTP/1.1. Неоднозначность не исправляется догадкой.

HTTP/2 использует :authority. RFC 9113 требует при переводе в HTTP/1.1 создать из неё Host и заменить прежний, если одновременно не меняется target. Перевод сохраняет одну идентичность.

Host отделил сайт от IP и возложил на каждый hop обязанность сохранить одно согласованное имя.

Источники и пределы

Закрытый набор: RFC 1945, RFC 2068, RFC 7230, RFC 9112, RFC 9113. Он устанавливает правила и мотивы, не нынешние числа сайтов, сэкономленных IP, defaults или инцидентов. Host не аутентифицирует DNS, TLS и отправителя.