aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/http/session
diff options
context:
space:
mode:
Diffstat (limited to 'files/ru/web/http/session')
-rw-r--r--files/ru/web/http/session/index.html158
1 files changed, 158 insertions, 0 deletions
diff --git a/files/ru/web/http/session/index.html b/files/ru/web/http/session/index.html
new file mode 100644
index 0000000000..42de794853
--- /dev/null
+++ b/files/ru/web/http/session/index.html
@@ -0,0 +1,158 @@
+---
+title: HTTP сессия
+slug: Web/HTTP/Session
+tags:
+ - HTTP
+translation_of: Web/HTTP/Session
+---
+<div>{{HTTPSidebar}}</div>
+
+<p>Так как HTTP — это клиент-серверный протокол, HTTP сессия состоит из трёх фаз:</p>
+
+<ol>
+ <li>Клиент устанавливает TCP соединения (или другое соединение, если не используется TCP транспорт).</li>
+ <li>Клиент отправляет запрос и ждёт ответа. </li>
+ <li>Сервер обрабатывает запрос и посылает ответ, в котором содержится код статуса и соответствующие данные. </li>
+</ol>
+
+<p>Начиная с версии HTTP/1.1, после третьей фазы соединение не закрывается, так как клиенту позволяется инициировать другой запрос. То есть, вторая и третья фазы могут повторяться.</p>
+
+<h2 id="Установка_соединения">Установка соединения</h2>
+
+<p>Так как HTTP это клиент-серверный протокол, соединение всегда устанавливается клиентом. Открыть соединение в HTTP — значит установить соединение через соответствующий транспорт, обычно TCP.</p>
+
+<p>В случае с TCP, в качестве порта HTTP сервера по умолчанию на компьютере используется порт 80, хотя другие также часто используются, например 8000 или 8080. URL загружаемой страницы содержит доменное имя и порт, который можно и не  указывать если он соответствует порту по умолчанию. </p>
+
+<div class="note"><strong>Имеем в виду:</strong> Клиент-серверная модель не позволяет серверу посылать данные клиенту без явного запроса этих данных. Чтобы обойти эту проблему, веб разработчики используют различные техники: периодически пингуют сервер используя <a href="/en/DOM/XMLHttpRequest" title="en/XMLHTTPRequest">XMLHTTPRequest</a> Javascript объект, HTML <a href="/en/WebSockets" title="en/WebSockets">WebSockets API</a>, или похожие протоколы.</div>
+
+<h2 id="Отправка_запроса_клиента">Отправка запроса клиента</h2>
+
+<p>Когда соединение установлено user-agent может послать запрос. (user-agent это обычно веб браузер, но может им не быть) Клиентский запрос это текстовые директивы, разделенные между собой при помощи CRLF (переноса строки).  Сам запрос включает в себя три блока:</p>
+
+<ol>
+ <li>Первые строки содержат метод запроса и его параметры:
+ <ul>
+ <li>путь к документу - абсолютная URL без указания протокола и доменного имени</li>
+ <li>версию HTTP протокола </li>
+ </ul>
+ </li>
+ <li>Каждая последующая строка представляет собой HTTP заголовок и передает серверу некоторую информацию о типах предпочитаемых данных (наприм. какой язык , какие MIME типы) или инструкции меняющие поведение сервера (наприм. не отправлять ответ, если он уже в кэше) . Эти HTTP заголовки формируют блок, который заканчивается пустой строкой.</li>
+ <li>Последний блок является не обязательным и содержит дополнительные данные. По большей части используется методом POST.</li>
+</ol>
+
+<h3 id="Примеры_запросов">Примеры запросов</h3>
+
+<p>Получаем главную страницу developer.mozilla.org,  <a class="linkification-ext external" href="/" title="Linkification: http://developer.mozilla.org/">http://developer.mozilla.org/</a>, и говорим серверу, что user-agent предпочитает страницу на французском, если это возможно:</p>
+
+<pre>GET / HTTP/1.1
+Host: developer.mozilla.org
+Accept-Language: fr
+
+</pre>
+
+<p>Обращаем внимание на пустую строку в конце, которая отделяет блок данных от блока заголовков. Так как в запросе отсутствует <code>Content-Length:</code> HTTP заголовок, блок с данными пуст и сервер может начать обработку запроса, как только получит пустую строку, означающую конец заголовков.</p>
+
+<p>Отправляем результат сабмита формы:</p>
+
+<pre>POST /contact_form.php HTTP/1.1
+Host: developer.mozilla.org
+Content-Length: 64
+Content-Type: application/x-www-form-urlencoded
+
+name=Joe%20User&amp;request=Send%20me%20one%20of%20your%20catalogue</pre>
+
+<h3 id="Методы_запроса">Методы запроса</h3>
+
+<p>HTTP определяет набор <a href="/en-US/docs/Web/HTTP/Methods">методов запроса</a> с указанием желаемого действие на ресурсе. Хотя они также могут быть и существительными, эти запросы методы иногда называют HTTP-командами. Наиболее распространенные запросы <code>GET</code> и <code>POST</code>:</p>
+
+<ul>
+ <li>{{HTTPMethod("GET")}} используется для запроса содержимого указанного ресурса. Запрос с использованием <code>GET</code> должен только получать данные.</li>
+ <li>{{HTTPMethod("POST")}} метод отправляет данные на сервер, так что он может изменять свое состояние. Этот метод часто используется для <a href="/en-US/docs/Web/Guide/HTML/Forms">HTML форм</a>.</li>
+</ul>
+
+<h2 id="Структура_ответа_от_сервера">Структура ответа от сервера</h2>
+
+<p>После того как присоединенный агент отправил свой запрос, веб сервер обрабатывает его и отправляет ответ. По аналогии с клиентским запросом, ответ сервера — это текстовые директивы разделенные между собой CRLF, сгруппированные в три разных блока:</p>
+
+<ol>
+ <li>Первая строка — строка статуса, состоит из подтверждения используемой HTTP версии и статуса запроса (и его значения в виде, понятном человеку).</li>
+ <li>Последующие строки представляют собой HTTP заголовки, дающие клиенту некоторую информацию о посылаемых данных (прим. тип, размер, алгоритм сжатия, подсказки по кэшированию). Так же как и в случае клиентского запроса, эти HTTP заголовки формируют блок, заканчивающийся пустой строкой.</li>
+ <li>Последний блок содержит данные (если таковые имеются).</li>
+</ol>
+
+<h3 id="Примеры_ответов">Примеры ответов</h3>
+
+<p>Успешное получение веб страницы:</p>
+
+<pre>HTTP/1.1 200 OK
+Date: Sat, 09 Oct 2010 14:28:02 GMT
+Server: Apache
+Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
+ETag: "51142bc1-7449-479b075b2891b"
+Accept-Ranges: bytes
+Content-Length: 29769
+Content-Type: text/html
+
+&lt;!DOCTYPE html... <em><strong>(здесь идут 29769 байтов запрошенной веб-страницы)</strong></em>
+
+</pre>
+
+<p>Сообщение о том, что запрашиваемый ресурс был перемещен:</p>
+
+<pre>HTTP/1.1 301 Moved Permanently
+Server: Apache/2.2.3 (Red Hat)
+Content-Type: text/html; charset=iso-8859-1
+Date: Sat, 09 Oct 2010 14:30:24 GMT
+Location: <a class="linkification-ext" href="../../../../" title="Linkification: https://developer.mozilla.org/">https://developer.mozilla.org/</a> <strong><em>(это новый адрес запрошенного ресурса, ожидается, что клиент запросит его</em><em>)</em></strong>
+Keep-Alive: timeout=15, max=98
+Accept-Ranges: bytes
+Via: Moz-Cache-zlb05
+Connection: Keep-Alive
+X-Cache-Info: caching
+X-Cache-Info: caching
+Content-Length: 325 <strong><em>(Контент содержит стандартную страницу, которая будет показана, если клиент не может перейти по ссылке)</em></strong>
+
+&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"&gt;
+&lt;html&gt;&lt;head&gt;
+&lt;title&gt;301 Moved Permanently&lt;/title&gt;
+&lt;/head&gt;&lt;body&gt;
+&lt;h1&gt;Moved Permanently&lt;/h1&gt;
+&lt;p&gt;The document has moved &lt;a href="<a class="linkification-ext" href="../../../../" title="Linkification: https://developer.mozilla.org/">https://developer.mozilla.org/</a>"&gt;here&lt;/a&gt;.&lt;/p&gt;
+&lt;hr&gt;
+&lt;address&gt;Apache/2.2.3 (Red Hat) Server at developer.mozilla.org Port 80&lt;/address&gt;
+&lt;/body&gt;&lt;/html&gt;
+
+</pre>
+
+<p>Сообщение о том, что запрашиваемый ресурс не существует:</p>
+
+<pre>HTTP/1.1 404 Not Found
+Date: Sat, 09 Oct 2010 14:33:02 GMT
+Server: Apache
+Last-Modified: Tue, 01 May 2007 14:24:39 GMT
+ETag: "499fd34e-29ec-42f695ca96761;48fe7523cfcc1"
+Accept-Ranges: bytes
+Content-Length: 10732
+Content-Type: text/html
+
+&lt;!DOCTYPE html... <strong><em>(содержит пользовательскую страницу, помогающую пользователю найти отсутсвующий ресурс)</em></strong>
+</pre>
+
+<h3 id="Коды_статусов_ответа">Коды статусов ответа</h3>
+
+<p><a href="/ru/docs/Web/HTTP/Status">HTTP-коды ответов</a> показывают, выполнен ли успешно определенный HTTP-запрос. Ответы сгруппированы в пять классов: информационные ответы, успешные ответы, редиректы, ошибки клиента и ошибки сервера.</p>
+
+<ul>
+ <li>{{HTTPStatus(200)}}: OK. Запрос завершился успехом.</li>
+ <li>{{HTTPStatus(301)}}: Moved Permanently. Этот код значит, что URI запрошенного ресурса был изменён.</li>
+ <li>{{HTTPStatus(404)}}: Not Found. Сервер не может найти запрошенный ресурс.</li>
+</ul>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">Определение ресурсов в Интернете</a></li>
+ <li><a href="/ru/docs/Web/HTTP/Заголовки">HTTP заголовки</a></li>
+ <li><a href="/ru/docs/Web/HTTP/Methods">Методы HTTP запроса</a></li>
+ <li><a href="/ru/docs/Web/HTTP/Status">Коды ответа HTTP</a></li>
+</ul>