Це частина протоколу HTTP 1.1.
Зокрема, протокол HTTP 1.1 містить заголовок під назвою "хост:", який вказує, до якого веб-сайту на певному сервері клієнт намагається отримати доступ.
Отже, якщо snoopy.net і woodstock.org обидва діляться 192.0.32.10, а ваш браузер намагається отримати вміст із http://snoopy.net/doghouse
конкретного запиту http:
GET /doghouse HTTP/1.1
Host: snoopy.net
Якщо потрібна URL-адреса, http://woodstock.org/seeds
запит виглядатиме так
GET /seeds HTTP/1.1
Host: woodstock.org
В обох випадках між комп'ютером та портом 80 сервера був би роз'єм tcp. Сервер міг би отримати вміст від /var/www/snoopy.net або /var/www/woodstock.org/ на основі заголовка хосту.
Були б інші заголовки файлів cookie та інших матеріалів, таких як тип браузера та дозволений вміст, але саме заголовок "Хост" - це те, що дозволяє веб-серверу знати, який віртуальний веб-сайт бажаний.
У RFC2616 є більше .
Тому також, що на https-сайтах * має бути своя IP-адреса - обмін ключами і перевірка сертифікатів ssl відбувається до транзакції http, тож http-сервер не дізнається видавати сертифікат на "woodstock. org "або" snoopy.net ", коли він отримує з'єднання https на порт 443 192.0.32.10.
редагувати
** у коментарях Grawity зазначає, що в специфікації TLS є розширення на SSL, які дозволяють серверу знати, який веб-сайт користувач намагається отримати доступ, і що більшість сучасних веб-браузерів мають ці розширення, тому це теж має бути трохи сильний.