Демистификация заголовка HTTP Host
Заголовок HTTP-узла - это небольшая, но важная часть нашей современной сети. Он используется быстрее, чем вы могли бы подумать. В этом посте мы углубимся в историю заголовка и покажем, насколько это важно для быстрого предоставления контента, хранящегося в хранилище объектов.
С чего все началось: хостинг одного домена
Когда сеть только развивалась, некоторые ранние предположения работали хорошо. Как мы увидим, некоторые из наших предположений пришлось изменить.
Давайте разберем пример. Сейчас 1996 год. Джина Джи: “О-о-о, Ааа... Совсем чуть-чуть” звучит по радио. Реальные физические компьютеры, которые, вероятно, были бежевого цвета, запускали веб-серверы через порт 80. Таким образом, каждый сервер мог обслуживать контент только для одного домена. Вы открываете Netscape Navigator и переходите к www.example.com.
Браузер разрешает www.example.com, подключается к порту 80 сервера и отправляет несколько символов:
GET / HTTP/1.0
Веб-сервер прослушивает порт 80, получает запрос и отправляет ответ в формате HTML. Успех!
Сеть взлетела: виртуальный хостинг
Поскольку мечта о глобальном гипертексте воплотилась на практике, был достигнут большой успех. Успех был настолько большим, что ограничение только одним доменом на сервер стало проблемой. Вводится заголовок запроса Host
.
Давайте разберем пример. Сейчас 1997 год. По радио звучит песня Кардигана ”Lovefool". Настоящий компьютер, который теперь имеет гладкий черный цвет, управляет воображаемым компьютером, который, в свою очередь, управляет веб-сервером. Вы открываете Netscape Communicator и переходите к www.example.com.
Браузер разрешает www.example.com, подключается к порту 80 сервера и отправляет несколько символов:
GET / HTTP/1.1
Host: www.example.com
Веб-сервер прослушивает порт 80, получает запрос, обращает внимание на заголовок запроса хоста и отправляет обратно соответствующий HTML-ответ.
Результатом этого является то, что веб-сервер может использовать заголовок Host для направления вашего запроса на один из многих веб-сайтов, размещенных на одном компьютере. Больше нет необходимости иметь один IP-адрес для каждого веб-сайта. И слава богу, потому что у нас и близко не было достаточного количества IP-адресов для этого!
TLS
По мере развития Интернета электронная коммерция начала набирать обороты. Отправка номеров кредитных карт и других конфиденциальных данных в виде обычного текста по сети стала проблемой. Нам нужно было зашифровать контент при передаче через Интернет. Уровень защищенных сокетов (SSL) обеспечивал безопасную связь между веб-браузерами и веб-серверами и привел к созданию протокола безопасности транспортного уровня (TLS).
Сейчас 1999 год. Бритни Спирс“...Baby One More Time” звучит по радио, а нашим веб-сервером теперь управляет нечто неопределенного цвета, принадлежащее массовой хостинговой компании. Вы открываете Internet Explorer 5 и переходите к www.example.com.
Прежде чем браузер и сервер смогут использовать протокол HTTP, они сначала участвуют в диалоге TLS. Браузер подключается к порту 443. Как часть расширения для указания имени сервера TLS, браузер указывает имя сервера, с которым он связывается. Защищенный веб-сервер перенаправляет ваш запрос на один из множества веб-серверов.
Прежде чем браузер и сервер смогут использовать протокол HTTP, они сначала участвуют в диалоге TLS. Браузер подключается к порту 443. Как часть расширения для указания имени сервера TLS, браузер указывает имя сервера, с которым он связывается. Защищенный веб-сервер перенаправляет ваш запрос на один из множества веб-серверов.
После согласования TLS диалог по протоколу HTTP продолжается по защищенному соединению. Конфиденциальная информация больше не передается в виде обычного текста по сети, и происходит бум доткомов.
Сегодня
Это сегодня. Пока мы говорим, гипертекст распространяется по всему земному шару, и теперь мы слушаем радио, используя HTTP. Каждый запрос отправляет заголовок запроса Host
(для запросов HTTP/1.1) или псевдозаголовок :authority
(для запросов HTTP/2 и HTTP/3).
Мощная облачная платформа edge от Fastly позволяет разработчикам создавать исключительные веб-сайты и приложения. Мы находимся между клиентами наших клиентов и серверами наших клиентов (origins). Обычно заголовок request Host
модифицируется на уровне Fastly, поскольку у ваших источников может быть другое соглашение об именовании по сравнению с вашими общедоступными доменами.
Например, www.example.com может быть общественным достоянием, в то время как реальный сервис может работать на production.example.com.
Этот простой корпус легко настраивается. Для быстрой доставки или компьютерного обслуживания вы можете указать переопределяющий хост в источнике. Для службы быстрых вычислений user override_host
в файле fastly.toml для разработки. Для производства Fastly CLI устанавливает переопределение по умолчанию при добавлении серверной части.
Хранилища объектов
В то время как раньше единственным выходом было использование физических серверов и программного обеспечения, многие наши клиенты используют центральные платформы облачных вычислений по требованию. В частности, хранилища объектов, такие как Amazon S3 и Google Cloud Storage, отлично подходят для хранения изображений, ресурсов и даже статичных веб-сайтов. Быстрый доступ к ним обеспечивает высочайшую глобальную производительность.
Эти хранилища объектов находятся в разных доменах, поэтому нам нужно изменять заголовок Host
по мере быстрого прохождения запроса.
Для Amazon S3 самый простой способ получить доступ к корзине - использовать доступ в стиле виртуального хостинга. Переопределяемое имя хоста должно быть в формате:
<BUCKET NAME>.s3.<REGION-CODE>.amazonaws.com
Для облачного хранилища Google самый простой способ доступа к корзине аналогичен. Переопределяемое имя хоста должно быть в формате:
<BUCKET NAME>.storage.googleapis.com
Как и прежде, для службы Fastly Delivery можно указать хост переопределения в источнике. Для службы Fastly Compute используйте override_host
в fastly.toml для разработки. Для производства Fastly CLI устанавливает переопределение по умолчанию при добавлении серверной части.
Не забудьте защитить доступ к своим корзинам, используя подписанный заголовок авторизации AWS или аутентификацию Google Cloud HMAC. Включите экранирование, чтобы уменьшить задержку и количество запросов к хранилищу объектов.
Вывод
Мы путешествовали во времени и разоблачили заголовок Host
HTTP, небольшую часть большой сети.
Как и прежде, для службы быстрой доставки вы можете указать переопределяющий узел в источнике. Для службы быстрых вычислений используйте override_host
в файле fastly.toml для разработки. Для производства Fastly CLI устанавливает переопределение по умолчанию при добавлении серверной части.
Не забудьте обезопасить доступ к своим корзинам, используя подписанный заголовок авторизации AWS или аутентификацию Google Cloud HMAC. Включите экранирование, чтобы уменьшить задержку и количество запросов, отправляемых в хранилище объектов.