UfoStation

HTTP 1.1 Стабильная версия

Спустя год после появления на свет HTTP 1.0, RFC 1945, в январе 1997 года выходит новая версия протокола HTTP 1.1, RFC 2068. На самом деле нововведений, особенно если спускаться до деталей, много, ниже мы отметим некоторые важные из них.

В стандарте HTTP 1.1, правда в уже обновленной версии RFC 2616 от июня 1999 года, прямым текстом описывается необходимость (или мотивация) новой версии. Как выяснилось, прошлая версия протокола HTTP/1.0 недостаточно учитывала влияние иерархических прокси-серверов, кэширования, необходимости постоянных подключений и виртуальных хостов.

К тому же существовала еще одна проблема, не все веб-приложения стремились реализовывать полноценную поддержку нового протокола. Некоторые веб-приложения, можно сказать, по-прежнему называли себя «HTTP/1.0». Это потребовало некоторых дополнительных изменений в протоколе, чтобы два взаимодействующих приложения могли определить истинные возможности друг друга.

Кэширование

Версия HTTP 1.0 уже поддерживала кэширование, но имелись несовершенства. Например, заголовок If-Modified-Since использовал абсолютные метки времени, поэтому возможны были проблемы из-за несоответствий с синхронизацией времени. Чтобы решить эту проблему, был добавлен новый заголовок ETag для валидации кеша. Это потянуло за собой добавление других условных заголовков: If-None-Match, If-Match, If-Unmodifed-Since и If-Range.

Появился HTTP-заголовок Vary, который отправлялся в ответ клиенту и давал указание любым промежуточным кешам кэшировать отдельный экземпляр.

Также был добавлен механизм Cache-control, который определял политику кэширования.

Виртуальные хосты

Хотя заголовок Host появился еще в НТТР 1.0, тогда официально он не требовался, в то время как версия HTTP 1.1 требует этого по спецификации. Заголовок Host важен для маршрутизации сообщений через прокси-серверы, позволяет различать домены, которые указывают на один и тот же IP-адрес.

Однако вместе с таким улучшением добавились и некоторые проблемы безопасности, например, Host header injection может привести к Web Cache Poisoning, ложные перенаправлениям URL и другим последствия.

Постоянные соединения

Переиспользование TCP-соединения дает множество преимуществ, например: открывая и закрывая меньше TCP-соединений, экономится время работы процессора, память, используемая для блоков управления протоколом TCP; снижается нагрузка на сеть за счет уменьшения количества пакетов, вызванных открытием TCP; и прочее.

HTTP-заголовок Keep-Alive, позволяет переиспользовать текущие открытое соединение для отправки HTTP запросов и получения ответов, а не создавать новое соединение каждый раз.

HTTP-запросы и ответы могут быть конвейеризированы по соединению. Эта особенность называется HTTP Pipelining. Конвейерная обработка позволяет клиенту делать несколько запросов, не дожидаясь каждого ответа, что позволяет использовать одно TCP-соединение гораздо эффективнее и с гораздо меньшими затратами времени.

Сопроводительные материалы

HTTP Caching – HTTP 1.0 vs HTTP 1.1
Understanding The Vary Header
Cache Control
Difference Between HTTP 1.0 and HTTP 1.1
HTTP Host Header Attack: Explanation and Examples
HTTP Keep-Alive, Pipelining, Multiplexing and Connection Pooling

Нашли ошибку или опечатку? Предложите исправление

← Вернуться в блог