host
Тема повідомляє веб - сервер , який віртуальний хост для використання (якщо він налаштований). Ви навіть можете мати один і той же віртуальний хост, використовуючи кілька псевдонімів (= домени та доменні символи). У цьому випадку ви все ще маєте можливість читати цей заголовок вручну у веб-додатку, якщо ви хочете надати різну поведінку на основі різних доменів. Це можливо тому, що на своєму веб-сервері ви можете (і якщо я не помиляюся, ви повинні) встановити один vhost, щоб бути хостом за замовчуванням. Цей vhost за замовчуванням використовується, коли host
заголовок не відповідає жодному з налаштованих віртуальних хостів.
Це означає: Ви правильно розумієте, хоча вимова "декількох хостів" може бути дещо оманливою: Хост (адресована машина) той самий, що дійсно вирішується на IP-адресу - це різні доменні імена (включаючи субдомени), які також передаються як імена хостів (але не хости!).
Хоча це не є питанням, цікавий факт: ця специфікація призвела до проблем із SSL в перші дні, оскільки веб-сервер повинен доставити сертифікат, який відповідає домену, до якого звернувся клієнт. Однак, щоб знати, яким сертифікатом користуватися, веб-сервер повинен був знати заздалегідь вказане ім’я хоста. Але оскільки клієнт надсилає цю інформацію лише за зашифрованим каналом (це означає: після того, як сертифікат вже надісланий), сервер повинен був припустити, що ви переглядаєте хост за замовчуванням. Це означало один захищений ssl домен на IP-адресу / комбінацію портів.
Це було подолано за допомогою індикації імені сервера ; однак це знову порушує деяку конфіденційність, оскільки ім'я сервера тепер знову передається простим текстом, тож кожен чоловік-посередині побачить, до якого імені хоста ви намагаєтесь підключитися.
Хоча веб-сервер знає ім'я хоста з Індикації імені сервера, host
заголовок не є застарілим, оскільки інформація про вказівки імені сервера використовується лише в рукостисканні TLS. При незахищеному з’єднанні взагалі немає вказівки імені сервера, тому host
заголовок все ще дійсний (і необхідний).
Ще один цікавий факт: Більшість веб-серверів (якщо не всі) відхиляють ваш http-запит, якщо він не містить точно одного host
заголовка, навіть якщо його можна опустити, оскільки налаштований лише vhost за замовчуванням. Це означає, що мінімально необхідна інформація у запиті http- (get-) є першим рядком, що містить METHOD
RESOURCE
і, PROTOCOL VERSION
щонайменше, host
заголовка, як це:
GET /someresource.html HTTP/1.1
Host: www.example.com
У Документації MDN про заголовок хоста вони насправді формулюють це так:
Поле заголовка хоста повинно бути надіслане у всіх повідомленнях HTTP / 1.1. Код стану 400 (поганий запит) буде надісланий на будь-яке повідомлення запиту HTTP / 1.1, у якому відсутнє поле заголовка хоста або містить більше одного.
Як згадував Даррел Міллер, повні характеристики можна знайти в RFC7230 .
vhost
лише 3 закритихvirtual host
значення зі значенням, не близьким до вашої фрази, і 12default
здебільшого про порт,