Основные понятия HTTP
Hypertext Transfer Protocol (HTTP) — это протокол уровня приложения (т.е. прикладной по 7-OSI).
Характеристики:
- Не хранит состояние
- request/response-тип, т.е. Каждое сообщение является либо запросом, либо ответом
- общий интерфейс
- самоописательные сообщения (см. про метаданные представлений)
- может быть посредником для шлюзов не-HTTP ИС
Виды:
HTTP/1.1 — базовый.
HTTP/2 — представил мультиплексированный сеансовый уровень поверх существующих протоколов TLS и TCP для обмена параллельными сообщениями
HTTP/3 — обеспечивает большую независимость для параллельных сообщений, используя QUIC в качестве безопасного мультиплексированного транспорта по UDP вместо TCP.
Основная семантика
Схема взаимодействия в HTTP: Клиент создает сообщения-запросы, которые сообщают о его намерениях, и направляет эти сообщения на идентифицированный исходный сервер. Сервер прослушивает запросы, анализирует каждое полученное сообщение, интерпретирует семантику сообщения относительно идентифицированного целевого ресурса и отвечает на этот запрос одним или несколькими ответными сообщениями. Клиент проверяет полученные ответы, чтобы увидеть, были ли выполнены его намерения, определяя, что делать дальше, на основе кодов состояния и полученного контента.
Семантика HTTP включает:
- намерения, определенные каждым методом запроса
- расширения этой семантики, которые могут быть описаны в полях заголовка запроса
- коды состояния, описывающие ответ
- другие управляющие данные и метаданные ресурсов, которые могут быть указаны в полях ответа
- метаданные представления, которые описывают, как контент должен интерпретироваться получателем
- заголовки запроса, которые могут влиять на выбор контента, и различные алгоритмы выбора, которые в совокупности называются «согласованием контента»
Основные понятия
1. Resources. Цель HTTP-запроса называется «ресурсом». Большинство ресурсов идентифицируются с помощью унифицированного идентификатора ресурса (URI).
2. Representations. «Представление» — это информация, состояние ресурса. Состоит из неограниченного потока данных представления и метаданных.
3. Connections, Clients, and Servers. HTTP — клиент-серверный протокол, работающий через «соединение» транспортного или сеансового уровня. Разница между клиентом и сервером на уровне ПО только в абстрактной роли — какая программа слушает запросы и дает ответы, а какая делает запросы. HTTP не хранит состояние — семантику каждого сообщения запроса можно понять изолированно.
4. Messages. Запрос содержит метод, заголовки-модификаторы, метаданные о клиенте и запросе, данные для обработки. Ответ содержит код статуса, заголовки, метаданные ресурса и представления, содержимое в соответствии с кодом статуса.
5. User Agents. Любые инициаторы запроса. Обычно веб-браузеры и поисковые роботы :)
6. Origin Server. ПО, отвечающее на запросы.
7. Intermediaries. Посредники. Существует три распространенных формы HTTP-"посредника": прокси (для безопасных перенаправлений, общих кешей и т.д.), шлюз (для инкапсуляции, балансировки нагрузки и т.д.) и туннель (слепой ретранслятор сообщений). Ещё бывают посредники нижних уровней OSI, которые могут генерить уязвимости (например, перехватчики TCP-пакетов на уровне точек доступа к сети)
8. Caches. Это локальное хранилище прошлых ответов, для экономии сетевого трафика.
Пример:
Запрос
GET /hello.txt HTTP/1.1
User-Agent: curl/7.64.1
Host: www.example.com
Accept-Language: en, mi
Ответ
HTTP/1.1 200 OK
Дата: Пн, 27 Июл 2009 12:28:53 GMT
Сервер: Apache
Последнее изменение: Ср, 22 Июл 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: байты
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
Привет, мир! Мое содержимое включает завершающий CRLF.
Источник: RFC9110, Internet Engineering Task Force (IETF)