aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/http/messages/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/ru/web/http/messages/index.html')
-rw-r--r--files/ru/web/http/messages/index.html147
1 files changed, 147 insertions, 0 deletions
diff --git a/files/ru/web/http/messages/index.html b/files/ru/web/http/messages/index.html
new file mode 100644
index 0000000000..0aa51b52a1
--- /dev/null
+++ b/files/ru/web/http/messages/index.html
@@ -0,0 +1,147 @@
+---
+title: Сообщения HTTP
+slug: Web/HTTP/Messages
+tags:
+ - HTTP
+ - ВебМеханика
+ - Руководство
+translation_of: Web/HTTP/Messages
+---
+<div>{{HTTPSidebar}}</div>
+
+<p class="summary">HTTP сообщения - это обмен данными между сервером и клиентом. Есть два типа сообщений: <em><strong>запросы</strong></em>, отправляемые клиентом, чтобы инициировать реакцию со стороны сервера, и <em><strong>ответы </strong></em>от сервера.</p>
+
+<p>Сообщения HTTP состоят из текстовой информации в кодировке ASCII, записанной в несколько строк. В HTTP/1.1 и более ранних версиях они пересылались в качестве обычного текста. В HTTP/2 текстовое сообщение разделяется на фреймы, что позволяет выполнить оптимизацию и повысить производительность.</p>
+
+<p>Веб разработчики  не создают текстовые сообщения HTTP самостоятельно - это делает программа, браузер, прокси или веб-сервер. Они обеспечивают создание HTTP сообщений через конфигурационные файлы (для прокси и серверов), APIs (для браузеров) или другие интерфейсы.</p>
+
+<p><img alt="From a user-, script-, or server- generated event, an HTTP/1.x msg is generated, and if HTTP/2 is in use, it is binary framed into an HTTP/2 stream, then sent." src="https://mdn.mozillademos.org/files/13825/HTTPMsg2.png" style="height: 538px; width: 1174px;"></p>
+
+<p>Механизм бинарного фрагментирования в HTTP/2 разработан так, чтобы не потребовалось вносить изменения в имеющиеся APIs и конфигурационные файлы: он вполне прозрачен для пользователя.</p>
+
+<p>HTTP запросы и ответы имеют близкую структуру. Они состоят из:</p>
+
+<ol>
+ <li>Стартовой строки, описывающей запрос, или статус (успех или сбой). Это всегда одна строка.</li>
+ <li>Произвольного набора <em>HTTP заголовков,</em> определяющих запрос или описывающих тело сообщения.</li>
+ <li>Пустой строки, указывающей, что вся мета информация отправлена.</li>
+ <li>Произвольного тела, содержащего пересылаемые с запросом данные (например, содержимое HTML-формы ) или отправляемый в ответ документ. Наличие тела и его размер определяется стартовой строкой и заголовками HTTP.</li>
+</ol>
+
+<p>Стартовую строку вместе с заголовками сообщения HTTP называют <em>головой</em> запроса, а его данные - <em>телом</em>.</p>
+
+<p><img alt="Requests and responses share a common structure in HTTP" src="https://mdn.mozillademos.org/files/13827/HTTPMsgStructure2.png" style="height: 368px; width: 1239px;"></p>
+
+<h2 id="Запросы_HTTP">Запросы HTTP</h2>
+
+<h3 id="Стартовая_строка">Стартовая строка</h3>
+
+<p>HTTP запросы - это сообщения, отправляемые клиентом, чтобы инициировать реакцию со стороны сервера. Их стартовая строка состоит из трех элементов:</p>
+
+<ol>
+ <li>
+ <p><em><a href="/ru/docs/Web/HTTP/Methods">Метод HTTP</a></em>, глагол (например, {{HTTPMethod("GET")}}, {{HTTPMethod("PUT")}} или {{HTTPMethod("POST")}}) или существительное (например,  {{HTTPMethod("HEAD")}} или {{HTTPMethod("OPTIONS")}}), описывающие требуемое действие. Например, <code>GET</code> указывает, что нужно доставить некоторый ресурс, а <code>POST</code> означает отправку данных на сервер (для создания или модификации ресурса, или генерации возвращаемого документа).</p>
+ </li>
+ <li><em>Цель запроса</em>, обычно {{glossary("URL")}}, или абсолютный путь протокола, порт и домен обычно характеризуются контекстом запроса. Формат цели запроса зависит от используемого HTTP-метода. Это может быть
+ <ul>
+ <li>Абсолютный путь, за которым следует <code>'?'</code> и строка запроса. Это самая распространенная форма, называемая <em>исходной формой</em> (<em>origin form</em>) . Используется с методами <code>GET</code>, <code>POST</code>, <code>HEAD</code>, и <code>OPTIONS</code>.<br>
+ <code>POST / HTTP 1.1<br>
+ GET /background.png HTTP/1.0<br>
+ HEAD /test.html?query=alibaba HTTP/1.1<br>
+ OPTIONS /anypage.html HTTP/1.0</code></li>
+ <li>Полный URL<em> - абсолютная форма</em> (<em>absolute form</em>) , обычно используется с <code>GET</code> при подключении к прокси.<br>
+ <code>GET http://developer.mozilla.org/ru/docs/Web/HTTP/Messages HTTP/1.1</code></li>
+ <li>Компонента URL "authority", состоящая из имени домена и (необязательно) порта (предваряемого символом <code>':'</code>), <em>называется authority form</em>. Используется только с методом <code>CONNECT</code> при установке туннеля HTTP.<br>
+ <code>CONNECT developer.mozilla.org:80 HTTP/1.1</code></li>
+ <li>Форма звездочки (<em>asterisk form)</em>, просто "звездочка" (<code>'*'</code>) используется <code>с методом OPTIONS</code> и представляет сервер.<br>
+ <code>OPTIONS * HTTP/1.1</code></li>
+ </ul>
+ </li>
+ <li><em>Версия HTTP</em>, определяющая структуру оставшегося сообщения, указывая, какую версию предполагается использовать для ответа.</li>
+</ol>
+
+<h3 id="Заголовки">Заголовки</h3>
+
+<p><a href="/ru/docs/Web/HTTP/Headers">Заголовки запроса HTTP</a> имеют стандартную для заголовка HTTP структуру: не зависящая от регистра строка, завершаемая (<code>':'</code>) и значение, структура которого определяется заголовком. Весь заголовок, включая значение, представляет собой одну строку, которая может быть довольно длинной.</p>
+
+<p>Существует множество заголовков запроса. Их можно разделить на несколько групп:</p>
+
+<ul>
+ <li><em>Основные заголовки (General headers</em>), например, {{HTTPHeader("Via")}},  относящиеся к сообщению в целом</li>
+ <li><em>Заголовки запроса (Request headers</em>), например, {{HTTPHeader("User-Agent")}}, {{HTTPHeader("Accept-Type")}}, уточняющие запрос (как, например, {{HTTPHeader("Accept-Language")}}), придающие контекст (как {{HTTPHeader("Referer")}}), или накладывающие ограничения на условия (like {{HTTPHeader("If-None")}}).</li>
+ <li><em>Заголовки сущности</em>, например {{HTTPHeader("Content-Length")}}, относящиеся к телу сообщения. Как легко понять, они отсутствуют, если у запроса нет тела.</li>
+ <li><img alt="Example of headers in an HTTP request" src="https://mdn.mozillademos.org/files/13821/HTTP_Request_Headers2.png" style="height: 280px; width: 872px;"></li>
+</ul>
+
+
+
+<h3 id="Тело">Тело</h3>
+
+<p>Последней частью запроса является его тело. Оно бывает не у всех запросов: запросы, собирающие (fetching) ресурсы, такие как <code>GET</code>, <code>HEAD</code>, <code>DELETE</code>, или <code>OPTIONS</code>, в нем обычно не нуждаются. Но некоторые запросы отправляют на сервер данные для обновления, как это часто бывает с запросами <code>POST</code> (содержащими данные HTML-форм).</p>
+
+<p>Тела можно грубо разделить на две категории:</p>
+
+<ul>
+ <li>Одноресурсные тела (Single-resource bodies), состоящие из одного отдельного файла, определяемого двумя заголовками: {{HTTPHeader("Content-Type")}} и {{HTTPHeader("Content-Length")}}.</li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/HTTP/Basics_of_HTTP/MIME_types#multipartform-data">Многоресурсные тела (Multiple-resource bodies</a>), состоящие из множества частей, каждая из которых содержит свой бит информации. Они обычно связаны с <a href="/ru/docs/Web/Guide/HTML/Forms">HTML-формами </a>.</li>
+</ul>
+
+<h2 id="Ответы_HTTP">Ответы HTTP</h2>
+
+<h3 id="Строка_статуса_Status_line">Строка статуса (Status line)</h3>
+
+<p>Стартовая строка ответа HTTP, называемая строкой статуса, содержит следующую информацию:</p>
+
+<ol>
+ <li><em>Версию протокола</em>, <code>обычно HTTP/1.1</code>.</li>
+ <li><em>Код состояния (status code)</em>, показывающая, был ли запрос успешным. Примеры: {{HTTPStatus("200")}}, {{HTTPStatus("404")}} или {{HTTPStatus("302")}}</li>
+ <li><em>Пояснение (status text</em>). Краткое текстовое описание кода состояния, помогающее пользователю понять сообщение HTTP..</li>
+</ol>
+
+<p>Пример строки статуса: <code>HTTP/1.1 404 Not Found.</code></p>
+
+<h3 id="Заголовки_2">Заголовки</h3>
+
+<p><a href="/ru/docs/Web/HTTP/Headers">Заголовки ответов HTTP</a> имеют ту же структуру, что и все остальные заголовки: не зависящая от регистра строка, завершаемая двоеточием (<code>':'</code>) и значение, структура которого определяется типом заголовка. Весь заголовок, включая значение, представляет собой одну строку.</p>
+
+<p>Существует множество заголовков ответов. Их можно разделить на несколько групп:</p>
+
+<ul>
+ <li><em>Основные заголовки (General headers</em>), например, {{HTTPHeader("Via")}},  относящиеся к сообщению в целом.</li>
+ <li><em>Заголовки ответа (Response headers</em>), например, {{HTTPHeader("Vary")}} и {{HTTPHeader("Accept-Ranges")}}, сообщающие дополнительную информацию о сервере, которая не уместилась в строку состояния.</li>
+ <li><em>Заголовки сущности (Entity headers</em>), например, {{HTTPHeader("Content-Length")}}, относящиеся к телу ответа. Отсутствуют, если у запроса нет тела.</li>
+</ul>
+
+<p><img alt="Example of headers in an HTTP response" src="https://mdn.mozillademos.org/files/13823/HTTP_Response_Headers2.png" style="height: 344px; width: 805px;"></p>
+
+<h3 id="Тело_2">Тело</h3>
+
+<p>Последней частью ответа является его тело. Оно есть не у всех ответов: у ответов с кодом состояния, например, {{HTTPStatus("201")}} или {{HTTPStatus("204")}}, оно обычно отсутствует.</p>
+
+<p>Тела можно разделить на три категории:</p>
+
+<ul>
+ <li>Одноресурсные тела (Single-resource bodies), состоящие из отдельного файла известной длины, определяемые двумя заголовками: {{HTTPHeader("Content-Type")}} и {{HTTPHeader("Content-Length")}}.</li>
+ <li>Одноресурсные тела (Single-resource bodies), состоящие из отдельного файла неизвестной длины, разбитого на небольшие части (chunks) с заголовком {{HTTPHeader("Transfer-Encoding")}}, значением которого  является <code>chunked</code>.</li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/HTTP/Basics_of_HTTP/MIME_types#multipartform-data">Многоресурсные тела (Multiple-resource bodies)</a>, состоящие из многокомпонентного тела, каждая часть которого содержит свой сегмент информации. Они относительно редки.</li>
+</ul>
+
+<h2 id="Фреймы_HTTP2">Фреймы HTTP/2</h2>
+
+<p>Сообщения HTTP/1.x имеют несколько недостатков в отношении производительности:</p>
+
+<ul>
+ <li>Заголовки, в отличие от тел, не сжимаются.</li>
+ <li>Заголовки, которые зачастую практически совпадают у идущих подряд сообщений, приходится передавать по отдельности.</li>
+ <li>Мультиплекстность невозможна. Приходится открывать соединение для каждого сообщения, а теплые (warm) соединеня TCP эффективнее холодных (cold).</li>
+</ul>
+
+<p>HTTP/2 переходит на новый уровень: он делит сообщения HTTP/1.x на фреймы, которые внедряются в поток. Фреймы данных из заголовков отделены друг от друга, что позволяет сжимать заголовки. Несколько потоков можно объединять друг с другом - такой процесс называется мультиплексированием - что позволяет более эффективно использовать TCP-соединения.</p>
+
+<p><img alt="HTTP/2 modify the HTTP message to divide them in frames (part of a single stream), allowing for more optimization." src="https://mdn.mozillademos.org/files/13819/Binary_framing2.png" style="height: 735px; width: 810px;"></p>
+
+<p>Фреймы HTTP сейчас прозрачны для веб-разработчиков. Это дополнительный шаг, который HTTP/2 делает по отношению к сообщениям HTTP/1.1 и лежащему в основе транспортному протоколу. Для реализации фреймов HTTP веб-разработчикам не требуется вносить изменения в имеющиеся APIs; если HTTP/2 доступен и на сервере, и на клиенте, он включается и используется.</p>
+
+<h2 id="Заключение">Заключение</h2>
+
+<p>Сообщения HTTP играют ключевую роль в использовании HTTP; они имеют простую структуру и хорошо расширяемы. Механизм фреймов в HTTP/2 добавляет еще один промежуточный уровень между синтаксисом HTTP/1.x и используемым им транспортным протоколом, не проводя фундаментальных изменений: создается надстройка над уже зарекомендовавшими себя методами.</p>