3.2. HTTP

HTTP был разработан ещё в 1990-х годах вместе с разметкой HTML для создания первого интерактивного текстового веб-браузера, который мы теперь называем Всемирной паутиной. С тех пор протокол HTTP претерпел множество изменений, сохранив большую часть своей простоты и став более гибким. Он превратился из раннего протокола обмена файлами в современный интернет. На начало 2022 года протокол HTTP всё ещё остаётся одним из основных способов связи в интернете.

Теперь рассмотрим особенности и недостатки протокола HTTP.

Особенности HTTP

  1. Клиент и сервер знают о наличии друг друга только во время соединения. После разрыва соединения они как бы забывают друг о друге. И при следующем соединении общаются словно в первый раз.

  2. Из этого следует, что HTTP не имеет состояния (stateless), так как не поддерживает постоянное соединение.

  3. HTTP не зависит от носителя. По HTTP может быть отправлен любой тип данных, если и клиент и сервер знают, как обрабатывать его содержимое.

  4. HTTP загружает отдельные элементы при помощи нескольких соединений.

  5. HTTP не содержит информацию о том, когда необходимо закрыть соединение (но есть заголовки, позволяющие это сделать).

Недостатки HTTP

  1. Данные передаются в формате текста, поэтому хакерам легко их получить и использовать в своих целях.

  2. HTTP не имеет состояния, поэтому ни клиент, ни сервер не могут сохранять информацию между различными запросами.

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

  4. Параллельная загрузка ресурсов ограничена количеством подключений. На практике это около шести подключений.

  5. HTTP (HOL) проблема с Head of Line Blocking. Это то, что происходит, когда клиент запрашивает несколько ресурсов и один ресурс застревает из-за задержки предыдущего большого. Возникает очередь запросов и отложенная отправка запросов на клиенте. Этому мешает ещё и строгий порядок ответов на сервере.

  6. Заголовки не сжимаются, поэтому в веб-приложениях с большим количеством запросов скорость загрузки будет больше.

  7. Открытие нескольких TCP-соединений для запроса нескольких ресурсов.

Были созданы многочисленные обходные пути для решения этих проблем, например, сегментирование домена, спрайты. Кроме того, компания Google создала протокол SPDY (произносится как «спиди») для ускорения загрузки веб-приложений и улучшения работы HTTP.

Какие улучшения ввёл SPDY:

  • Использование параллельных запросов в одном соединении TCP (мультиплексирование).
  • Сжатие заголовков HTTP, то есть уменьшение их размера.
  • Реализация технологии server push, когда сервер может пересылать браузеру нужные на данной странице ресурсы без запроса.
  • Безопасность: SPDY обязывает шифровать соединение между браузером и сервером, то есть использовать HTTPS.
  • Браузеры могут устанавливать приоритеты, чтобы ресурсы, важные для отображения страницы, загружались первыми.

Поддержку SPDY начали прекращать из-за того, что браузеры реализовали поддержку HTTP/2, в котором SPDY использован как стартовая платформа. На момент 2022 года браузеры практически не поддерживают SPDY:

Поддержка браузерами SPDY