Сеанс
Типичный сеанс HTTP
В клиент-серверных протоколах, таких как HTTP, сеанс состоит из трёх этапов:
- Клиент устанавливает TCP-соединение (или соответствующее соединение, если на транспортном уровне используется не TCP).
- Клиент отправляет запрос и ожидает ответа.
- Сервер обрабатывает запрос, отправляет ответ, указывая код состояния и соответствующие данные.
Начиная с HTTP/1.1, после завершения третьего этапа соединение больше не закрывается, и клиенту разрешается отправить ещё один запрос: это означает, что второй и третий этапы теперь можно выполнять сколько угодно раз.
Установление соединения
В клиент-серверных протоколах соединение устанавливает клиент. Открытие соединения в HTTP означает установление соединения на базовом транспортном уровне, обычно это TCP.
При использовании TCP портом по умолчанию для HTTP-сервера на компьютере является порт 80. Можно использовать и другие порты, например 8000 или 8080. URL страницы, которую нужно получить, содержит и доменное имя, и номер порта, хотя последний можно опустить, если он равен 80. Подробнее см. в справочнике по URL.
Примечание: Клиент-серверная модель не позволяет серверу отправлять данные клиенту без явного запроса. Однако различные веб-API поддерживают такой сценарий, включая Push API, события, отправленные сервером, и WebSockets API.
Отправка клиентского запроса
После установления соединения пользовательский агент может отправить запрос (обычно пользовательским агентом является веб-браузер, но им может быть и что-то другое, например поисковый робот). Клиентский запрос состоит из текстовых директив, разделённых CRLF (возвратом каретки и последующим переводом строки) и разделённых на три блока:
-
Первая строка содержит метод запроса и его параметры:
- путь к документу в виде абсолютного URL без протокола и доменного имени
- версию протокола HTTP
-
В последующих строках указываются заголовки HTTP, сообщающие серверу, какие типы данных подходят (например, какой язык и какие MIME-типы), или другие данные, меняющие его поведение (например, не отправлять ответ, если он уже сохранён в кэше). Эти заголовки HTTP образуют блок, который заканчивается пустой строкой.
-
Последний блок — необязательный блок данных, который может содержать дополнительные данные, используемые главным образом методом 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, и подразделяется на три блока:
- Первая строка — строка состояния — содержит подтверждение используемой версии HTTP, за которым следует код состояния ответа (и его краткое значение в понятном человеку виде).
- В последующих строках указываются заголовки HTTP, сообщающие клиенту сведения об отправленных данных (например, тип, размер данных, использованный алгоритм сжатия, подсказки по кэшированию). Как и блок заголовков HTTP в клиентском запросе, эти заголовки образуют блок, заканчивающийся пустой строкой.
- Последний блок — блок данных, содержащий необязательные данные.
Примеры ответов
Ответ с успешно загруженной веб-страницей:
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. Ответы делятся на пять классов: информационные ответы, успешные ответы, перенаправления, ошибки клиента и ошибки сервера.
См. также
© 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