--- title: Сообщения HTTP slug: Web/HTTP/Messages tags: - HTTP - Веб Механика - Руководство translation_of: Web/HTTP/Messages ---
HTTP сообщения - это обмен данными между сервером и клиентом. Есть два типа сообщений: запросы, отправляемые клиентом, чтобы инициировать реакцию со стороны сервера, и ответы от сервера.
Сообщения HTTP состоят из текстовой информации в кодировке ASCII, записанной в несколько строк. В HTTP/1.1 и более ранних версиях они пересылались в качестве обычного текста. В HTTP/2 текстовое сообщение разделяется на фреймы, что позволяет выполнить оптимизацию и повысить производительность.
Веб разработчики не создают текстовые сообщения HTTP самостоятельно - это делает программа, браузер, прокси или веб-сервер. Они обеспечивают создание HTTP сообщений через конфигурационные файлы (для прокси и серверов), APIs (для браузеров) или другие интерфейсы.
Механизм бинарного фрагментирования в HTTP/2 разработан так, чтобы не потребовалось вносить изменения в имеющиеся APIs и конфигурационные файлы: он вполне прозрачен для пользователя.
HTTP запросы и ответы имеют близкую структуру. Они состоят из:
Стартовую строку вместе с заголовками сообщения HTTP называют головой запроса, а его данные - телом.
HTTP запросы - это сообщения, отправляемые клиентом, чтобы инициировать реакцию со стороны сервера. Их стартовая строка состоит из трех элементов:
Метод HTTP, глагол (например, {{HTTPMethod("GET")}}, {{HTTPMethod("PUT")}} или {{HTTPMethod("POST")}}) или существительное (например, {{HTTPMethod("HEAD")}} или {{HTTPMethod("OPTIONS")}}), описывающие требуемое действие. Например, GET
указывает, что нужно доставить некоторый ресурс, а POST
означает отправку данных на сервер (для создания или модификации ресурса, или генерации возвращаемого документа).
'?'
и строка запроса. Это самая распространенная форма, называемая исходной формой (origin form) . Используется с методами GET
, POST
, HEAD
, и OPTIONS
.POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
GET
при подключении к прокси.GET http://developer.mozilla.org/ru/docs/Web/HTTP/Messages HTTP/1.1
':'
), называется authority form. Используется только с методом CONNECT
при установке туннеля HTTP.CONNECT developer.mozilla.org:80 HTTP/1.1
'*'
) используется с методом OPTIONS
и представляет сервер.OPTIONS * HTTP/1.1
Заголовки запроса HTTP имеют стандартную для заголовка HTTP структуру: не зависящая от регистра строка, завершаемая (':'
) и значение, структура которого определяется заголовком. Весь заголовок, включая значение, представляет собой одну строку, которая может быть довольно длинной.
Существует множество заголовков запроса. Их можно разделить на несколько групп:
Последней частью запроса является его тело. Оно бывает не у всех запросов: запросы, собирающие (fetching) ресурсы, такие как GET
, HEAD
, DELETE
, или OPTIONS
, в нем обычно не нуждаются. Но некоторые запросы отправляют на сервер данные для обновления, как это часто бывает с запросами POST
(содержащими данные HTML-форм).
Тела можно грубо разделить на две категории:
Стартовая строка ответа HTTP, называемая строкой статуса, содержит следующую информацию:
обычно HTTP/1.1
.Пример строки статуса: HTTP/1.1 404 Not Found.
Заголовки ответов HTTP имеют ту же структуру, что и все остальные заголовки: не зависящая от регистра строка, завершаемая двоеточием (':'
) и значение, структура которого определяется типом заголовка. Весь заголовок, включая значение, представляет собой одну строку.
Существует множество заголовков ответов. Их можно разделить на несколько групп:
Последней частью ответа является его тело. Оно есть не у всех ответов: у ответов с кодом состояния, например, {{HTTPStatus("201")}} или {{HTTPStatus("204")}}, оно обычно отсутствует.
Тела можно разделить на три категории:
chunked
.Сообщения HTTP/1.x имеют несколько недостатков в отношении производительности:
HTTP/2 переходит на новый уровень: он делит сообщения HTTP/1.x на фреймы, которые внедряются в поток. Фреймы данных из заголовков отделены друг от друга, что позволяет сжимать заголовки. Несколько потоков можно объединять друг с другом - такой процесс называется мультиплексированием - что позволяет более эффективно использовать TCP-соединения.
Фреймы HTTP сейчас прозрачны для веб-разработчиков. Это дополнительный шаг, который HTTP/2 делает по отношению к сообщениям HTTP/1.1 и лежащему в основе транспортному протоколу. Для реализации фреймов HTTP веб-разработчикам не требуется вносить изменения в имеющиеся APIs; если HTTP/2 доступен и на сервере, и на клиенте, он включается и используется.
Сообщения HTTP играют ключевую роль в использовании HTTP; они имеют простую структуру и хорошо расширяемы. Механизм фреймов в HTTP/2 добавляет еще один промежуточный уровень между синтаксисом HTTP/1.x и используемым им транспортным протоколом, не проводя фундаментальных изменений: создается надстройка над уже зарекомендовавшими себя методами.