Spec-Zone.ru › HTTP

Сессия

Типичная HTTP-сессия

В протоколах клиент-сервер, таких как HTTP, сессии состоят из трёх фаз:

  1. Клиент устанавливает TCP-соединение (или соответствующее соединение, если транспортный уровень не TCP).
  2. Клиент отправляет свой запрос и ждёт ответа.
  3. Сервер обрабатывает запрос, отправляя обратно свой ответ, предоставляя код состояния и соответствующие данные.

Начиная с HTTP/1.1, соединение больше не закрывается после завершения третьей фазы, и клиенту теперь разрешено отправлять дальнейшие запросы: это означает, что вторая и третья фазы теперь могут выполняться любое количество раз.

Установление соединения

В протоколах клиент-сервер именно клиент устанавливает соединение. Открытие соединения в HTTP означает инициацию соединения на базовом транспортном уровне, обычно это TCP.

В TCP по умолчанию порт для HTTP-сервера на компьютере — порт 80. Также могут использоваться другие порты, такие как 8000 или 8080. URL страницы для получения содержит как доменное имя, так и номер порта, хотя последний можно опустить, если он равен 80. Для получения более подробной информации см. Идентификация ресурсов в Интернете.

Примечание: Модель клиент-сервер не позволяет серверу отправлять данные клиенту без явного запроса на это. Для решения этой проблемы веб-разработчики используют несколько методик: периодически обращаются к серверу с помощью API XMLHTTPRequest, fetch(), используя API WebSockets или аналогичные протоколы.

Отправка запроса клиентом

После установления соединения пользовательский агент может отправить запрос (пользовательский агент обычно — веб-браузер, но это может быть и что-то другое, например, робот-паук). Запрос клиента состоит из текстовых директив, разделённых символами CRLF (возврат каретки, затем перевод строки), разделёнными на три блока:

  1. Первая строка содержит метод запроса и его параметры:
    • путь к документу в качестве абсолютного URL без протокола или доменного имени
    • версия HTTP-протокола
  2. Следующие строки представляют заголовок HTTP, предоставляющий серверу информацию о типе данных (например, язык, MIME-типы) или другие данные, изменяющие его поведение (например, не отправлять ответ, если он уже кэширован). Эти заголовки HTTP образуют блок, который заканчивается пустой строкой.
  3. Последний блок — это необязательный блок данных, который может содержать дополнительные данные, в основном используемые методом POST.

Примеры запросов

Получение корневой страницы developer.mozilla.org, (https://developer.mozilla.org/), и указание серверу, что пользовательский агент предпочитал бы страницу на французском языке, если это возможно:

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr

Обратите внимание на конечную пустую строку. Она отделяет блок данных от блока заголовков. Поскольку в HTTP-заголовке нет Content-Length, этот блок данных представлен пустым, что отмечает конец заголовков, позволяя серверу обработать запрос в момент получения этой пустой строки.

Например, отправка результата формы:

POST /contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Length: 64
Content-Type: application/x-www-form-urlencoded

name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue

Методы запросов

HTTP определяет набор методов запросов, указывающих желаемое действие, которое должно быть выполнено над ресурсом. Хотя они также могут быть существительными, эти методы запросов иногда называют HTTP-глаголами. Наиболее распространённые запросы — GET и POST:

  • Метод GET запрашивает представление данных указанного ресурса. Запросы, использующие GET, должны только извлекать данные.
  • Метод POST отправляет данные на сервер, чтобы он мог изменить своё состояние. Этот метод часто используется для HTML-форм.

Структура ответа сервера

После того, как подключённый агент отправил свой запрос, веб-сервер обрабатывает его и в конечном итоге возвращает ответ. Подобно запросу клиента, ответ сервера формируется из текстовых директив, разделённых CRLF, но разделённых на три блока:

  1. Первая строка, строка состояния, состоит из подтверждения используемой версии HTTP, за которым следует код состояния ответа (и его краткое значение в удобочитаемой форме).
  2. Следующие строки представляют собой конкретные заголовки HTTP, предоставляющие клиенту информацию о переданных данных (например, тип, размер данных, используемый алгоритм сжатия, подсказки о кэшировании). Аналогично блоку заголовков HTTP для запроса клиента, эти заголовки HTTP образуют блок, завершающийся пустой строкой.
  3. Последний блок — блок данных, который содержит необязательные данные.

Примеры ответов

Успешный ответ веб-страницы:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 55743
Connection: keep-alive
Cache-Control: s-maxage=300, public, max-age=0
Content-Language: en-US
Date: Thu, 06 Dec 2018 17:37:18 GMT
ETag: "2e77ad1dc6ab0b53a2996dfd4653c1c3"
Server: meinheld/0.6.1
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding,Cookie
Age: 7

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>A simple webpage</title>
</head>
<body>
  <h1>Simple HTML webpage</h1>
  <p>Hello, world!</p>
</body>
</html>

Уведомление о том, что запрашиваемый ресурс был постоянно перемещён:

HTTP/1.1 301 Moved Permanently
Server: Apache/2.4.37 (Red Hat)
Content-Type: text/html; charset=utf-8
Date: Thu, 06 Dec 2018 17:33:08 GMT
Location: https://developer.mozilla.org/ (this is the new link to the resource; it is expected that the user-agent will fetch it)
Keep-Alive: timeout=15, max=98
Accept-Ranges: bytes
Via: Moz-Cache-zlb05
Connection: Keep-Alive
Content-Length: 325 (the content contains a default page to display if the user-agent is not able to follow the link)

<!DOCTYPE html>… (contains a site-customized page helping the user to find the missing resource)

Уведомление о том, что запрашиваемого ресурса не существует:

HTTP/1.1 404 Not Found
Content-Type: text/html; charset=utf-8
Content-Length: 38217
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Content-Language: en-US
Date: Thu, 06 Dec 2018 17:35:13 GMT
Expires: Thu, 06 Dec 2018 17:35:13 GMT
Server: meinheld/0.6.1
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding,Cookie
X-Cache: Error from cloudfront

<!DOCTYPE html>… (contains a site-customized page helping the user to find the missing resource)

Коды состояния ответа

Коды состояния ответа HTTP указывают, был ли успешно выполнен конкретный HTTP-запрос. Ответы сгруппированы в пять классов: информационные ответы, успешные ответы, перенаправления, ошибки клиента и ошибки сервера.

  • 200: Хорошо. Запрос выполнен успешно.
  • 301: Постоянное перемещение. Этот код ответа означает, что URI запрашиваемого ресурса был изменён.
  • 404: Не найдено. Сервер не может найти запрашиваемый ресурс.

См. также

  • Идентификация ресурсов в Интернете
  • HTTP-заголовки
  • Методы HTTP-запросов
  • Коды состояния ответа HTTP

© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Session

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API