Spec-Zone.ru › HTTP

Сеанс

Типичный сеанс HTTP

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

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

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

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

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

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

Примечание: Клиент-серверная модель не позволяет серверу отправлять данные клиенту без явного запроса. Однако различные веб-API поддерживают такой сценарий, включая Push API, события, отправленные сервером, и WebSockets API.

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

После установления соединения пользовательский агент может отправить запрос (обычно пользовательским агентом является веб-браузер, но им может быть и что-то другое, например поисковый робот). Клиентский запрос состоит из текстовых директив, разделённых 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 в клиентском запросе, эти заголовки образуют блок, заканчивающийся пустой строкой.
  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 basic webpage</title>
</head>
<body>
  <h1>Basic 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: Не найдено. Сервер не может найти запрошенный ресурс.

См. также

  • URL
  • Заголовки HTTP
  • Методы запросов HTTP
  • Коды состояния ответа HTTP

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

Spec-Zone.ru

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