DevGang
Авторизоваться

Демистификация заголовка 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. Включите экранирование, чтобы уменьшить задержку и количество запросов, отправляемых в хранилище объектов.

Источник:

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу