Учебник по HTTP
HTTP (HyperText Transfer Protocol) — это протокол прикладного уровня, используемый для распределенных, совместных гипермедийных информационных систем.
HTTP — основа передачи данных для Всемирной паутины (WWW). Он предназначен для обеспечения связи между клиентами и серверами и является одним из наиболее часто используемых протоколов в Интернете.
HTTP — это протокол, который передает данные (HTML-файлы, файлы изображений, результаты запросов и т. д.) на основе коммуникационного протокола TCP/IP.
Первоначальной целью HTTP было предоставить метод для публикации и получения HTML-страниц. Ресурсы, запрашиваемые через протоколы HTTP или HTTPS, идентифицируются с помощью универсальных идентификаторов ресурсов (URI).
HTTP-запрос-ответ
Основной принцип работы HTTP заключается в том, что клиент (обычно веб-браузер) отправляет запрос серверу, и, получив запрос, сервер возвращает соответствующие ресурсы. Этими ресурсами могут быть веб-страницы, изображения, аудиофайлы, видео и т. д.
HTTP использует клиент-серверную модель, в которой клиент отправляет запросы, а сервер возвращает ответы.

Модель запрос-ответ HTTP обычно состоит из следующих шагов:
Установка соединенияМежду клиентом и сервером устанавливается соединение. В традиционном HTTP это основано на протоколе TCP/IP. Более новые HTTP/2 и HTTP/3 используют более продвинутые протоколы транспортного уровня, такие как двоичный протокол на основе TCP (HTTP/2) или протокол QUIC на основе UDP (HTTP/3).
Отправка запросаКлиент отправляет запрос серверу. Запрос содержит URL ресурса, к которому нужно получить доступ, метод запроса (GET, POST, PUT, DELETE и т. д.), заголовки запроса (например, Accept, User-Agent) и необязательное тело запроса (для запросов POST или PUT).
Обработка запросаПосле получения запроса сервер находит соответствующий ресурс на основе информации в запросе и выполняет соответствующие операции обработки. Это может включать извлечение данных из базы данных, генерацию динамического содержимого или просто возврат статических файлов.
Отправка ответаСервер инкапсулирует результат обработки в ответ и отправляет его обратно клиенту. Ответ содержит код состояния (для указания успеха или неудачи запроса), заголовки ответа (например, Content-Type, Content-Length) и необязательное тело ответа (например, HTML-страницы, данные изображений).
Закрытие соединенияПосле завершения цикла запрос-ответ соединение между клиентом и сервером может быть закрыто, если не используется постоянное соединение (например, keep-alive в HTTP/1.1).
Методы HTTP
Методы HTTP определяют, какие действия клиент может выполнять с ресурсами на сервере.
Основные методы HTTP:
- GETGET: запрашивает указанный ресурс с сервера. Это наиболее часто используемый метод для доступа к страницам.
- POSTPOST: запрашивает у сервера принять и обработать данные в теле запроса, обычно используется для отправки форм.
- PUTPUT: запрашивает у сервера сохранить ресурс и заменить всё содержимое целевого ресурса содержимым в теле запроса.
- DELETEDELETE: запрашивает у сервера удалить указанный ресурс.
- HEADHEAD: похож на GET, но не извлекает содержимое ресурса, а только информацию из заголовков ответа.
Коды состояния HTTP
Коды состояния HTTP — это ответ сервера на запросы клиента.
Коды состояния делятся на пять категорий:
- 1xx (Информационные коды состояния)Указывает, что полученный запрос обрабатывается.
- 2xx (Успешные коды состояния)Указывает, что запрос был успешно обработан.
- 3xx (Коды перенаправления)Для завершения запроса требуется дополнительное действие.
- 4xx (Коды ошибок клиента)Указывает, что запрос содержит синтаксическую ошибку или не может быть выполнен.
- 5xx (Коды ошибок сервера)Сервер столкнулся с ошибкой при обработке запроса.
Версии HTTP
У HTTP есть несколько версий. В настоящее время широко используются HTTP/1.1 и HTTP/2, а HTTP/3 постепенно продвигается.
- HTTP/1.1HTTP/1.1: поддерживает постоянные соединения, позволяя передавать несколько запросов/ответов по одному и тому же TCP-соединению, снижая накладные расходы на установку и закрытие соединений.
- HTTP/2HTTP/2: основан на бинарном кадрировании, поддерживает мультиплексирование, позволяя одновременно инициировать несколько независимых двунаправленных обменов через одно HTTP/2-соединение.
- HTTP/3HTTP/3: основан на протоколе QUIC, предназначен для снижения задержки сети и повышения скорости и безопасности передачи.
Безопасность
Сам по себе HTTP небезопасен, поскольку передаваемые данные не шифруются и могут быть перехвачены или изменены. Для решения этой проблемы был введён HTTPS (подробнее в следующей главе), который добавляет в HTTP протоколы SSL/TLS, обеспечивая шифрование и аутентификацию при передаче данных.
Другие расширения