HTTP-приложения #

Васильев Андрей Михайлович, 2024

Версии презентации

Интернет гипертекста #

В рамках концепции гипертекста доступ ко всем данным может быть осуществлён с помощью одного приложения, браузера, способного отображать документы и удобным образом переходить к другим документам в сети

  • Веб-браузер является средством просмотра HTML-документов
  • HTML-документы содержат текст и ссылки на другие документы
  • Документы передаются с сервера на клиент с помощью протокола HTTP
  • Для доступа к данным пользователю достаточно знать доменное имя сервера

Базовые технологии интернета гипертекста

  • Протокол обмена документами HTTP был утверждён в 1992 году
  • Язык разметки документов HTML был утверждён в 1993 году

Протокол HTTP #

Является протоколом прикладного уровня, решающий задачу передачи документов по общей сети удобным для пользователя образом

История создания #

  • Версия 0.9 представлена в 1990-1992 годах
  • Версия 1.0 стандартизирована в 1996 году
  • Версия 1.1 стандартизирована в 1999 году
  • Версия 2 стандартизирована в 2015 году
  • Версия 3 стандартизирована в 2022 году

Новые версии обратно совместимы со старыми, добавляют новые возможности

Связанные сетевые технологии #

  • Стек сетевых протоколов TCP / IP (1980-е)
    • Транспортный протокол TCP
      • Используется в протоколах HTTP 1.1 (1999), HTTP 2 (2015)
    • Транспортный протокол UDP
      • Используется в протоколе HTTP 3 (2022)
  • Безопасность транспортного уровня TLS (1999, 1.3 — 2018)
    • Является основой для защищённого варианта HTTP, HTTPS
  • Система доменных имён DNS (1983, 1987)
  • Доменные имена поверх HTTPS, DoH (2018)

Данные технологии детально не рассматриваются в курсе, но их знание является необходимым для эффективной разработки больших продуктовых систем

Архитектура HTTP #

В рамках протокола выделяются 2 роли: сервер и клиент

  • Приложение-сервер работает постоянно и ожидает подключения от клиента
  • Клиент подключается к серверу и передаёт запрос на получение документа
  • Сервер возвращает запрошенный документ, если он существует
  • Сервер закрывает соединение после передачи документа

diagram

Особенности HTTP-приложений #

  • HTTP-сервер работает постоянно, так как он не знает когда к нему планирует обратиться клиент
  • HTTP-сервер может одновременно обрабатывать запросы от множества клиентов
  • Клиент может послать очередной запрос с любой задержкой: 10мс, 2000мс и т.д.
  • В последних версиях протокола HTTP сервер может инициировать отправку данных на сторону клиента

HTTP-приложения являются распределёнными приложениями, в которых как сервер, так и клиент должен поддерживать совместное актуальное состояние

Роли участников в HTTP-взаимодействии #

Между клиентом и сервером может находится несколько проксирующих серверов

diagram

  • Задача прокси-серверов, находящихся рядом с клиентом состоит в уменьшении объёма запрашиваемых данных (в кешировании):
    • запросы могут быть одинаковыми у разных клиентов
    • один клиент может инициировать запросы к одному ресурсу
  • В современны браузерах встроен агрессивный кеширующий сервер
  • Задачи прокси-сервера, находящегося рядом с серверами, состоит в балансировке нагрузки между серверами
    • По географическому положению клиента
    • По степени нагруженности серверов
    • В зависимости от клиента

Современные HTTP-приложения #

В конце 2000х годов стало технически возможно выполнять большое количество кода на стороне веб-браузера за относительно разумное время

diagram

  • Веб-браузеру необходимо скачать JavaScript или WebAssembly-код приложения
  • Веб-приложение может оперативно изменять DOM-модель отображаемого HTML-документа
  • Веб-приложение запрашивает новые данные посредством AJAX (Asynchronous JavaScript and XML), данные передаются обычно в формате JSON

HTTP-сервисы #

diagram

  • Запущенному веб-приложению в рамках веб-браузера не обязательно обращаться к серверу, с которого оно было загружено
  • Клиентами HTTP-серверов являются не только веб-приложения, запущенные в веб-браузере
  • Для решения множества задач разработки серверных приложений они разделяются на компоненты, которые общаются между собой по HTTP