Что идет после стартовой строки
Перейти к содержимому

Что идет после стартовой строки

  • автор:

Основное об HTTP

HTTP (HyperText Transfer Protocol, «протокол передачи гипертекста») — это протокол передачи данных, изначально предназанченный для передачи гипертекстовых документов. Согласно модели OSI протокол HTTP является протоколом прикладного уровня (уровня приложения). Основой HTTP является клиент-серверная структура передачи данных:

  • Клиент (браузер или клиентское приложение) формирует запрос и отправляет его на сервер;
  • Сервер обрабатывает данный запрос, формирует ответ и отправляет обратно клиенту.

В настоящее время протокол HTTP повсюду используется во Всемирной паутине для получения информации с веб-сайтов. Передача данных по протоколу HTTP, как правило, происходит через TCP/IP-соединение. Сервер по умолчанию использует TCP-порт 80 (хотя может использовать и любой другой).

И так, чтобы лушче разобраться в HTTP протоколе, рассмотрим кратко теорию и на наглядном примере разберем более подробно.

Структура протокола HTTP

Каждое HTTP-сообщение состоит из стартовой строки, заголовков и тела сообщения (может отсутствовать).

HTTP-запрос к ресурсу

Стартовая строка запроса составляется следующим способом: Метод URI HTTP/Версия

  1. Метод – тип запроса, одно слово заглавными буквами, определяет операцию, которую нужно осуществить с указанным ресурсом. Например, метод POST применяется для передачи пользовательских данных заданному ресурсу. Метод GET используется для запроса содержимого указанного ресурса, также для начала какого-либо процесса. Есть еще много других методов, но в данной статье их мы не будем рассматривать;
  2. URI (Uniform Resource Identifier, унифицированный идентификатор ресурса) – определяет путь к запрашиваему конкретному ресурсу (документу);
  3. Версия – определяет, в соответствии с какой версией стандарта HTTP составлен запрос.

В данном примере стартовая строка показывает, что запрашивается стартовая страница.

Более подробный пример: Например, мы заходим на сайт tonyasokolova.github.io, и мы хотим прочитать о владельце данного сайта. Мы нажимаем на About, т.е. мы обращаемся к tonyasokolova.github.io/about, в качестве URI у нас /about. Так как никаких пользовательских данных мы не передаем, то у нас метод GET. Версия HTTP обычно всегда 1.1. Таким образом стартовая строка будет выглядеть так:
index page

После стартовой строки идут заголовки (HTTP Headers) – это строки в HTTP-сообщении, содержащие разделённую двоеточием пару параметр-значение.

Разберем в нашем примере пару заголовков. Первый заголовок это хост (host) – к какому сайту мы обращаемся, в данном случае tonyasokolova.github.io: index page

Второй заголовок User-Agent – клиентское приложение, в данном примере используется браузер mozilla firefox: index page

Остальные заголовки: Accept – список допустимых форматов ресурса, Accept-Language – список поддерживаемых языков, Сookie – используется веб-серверами для того, чтобы различать пользователей и хранить данные о них.

Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой. Так как метод у нас GET, то тело сообщения у нас отсутствует.

Ответ от сервера

Стартовая строка ответа выглядит так: HTTP/Версия КодСостояния Пояснение

  1. Версия – как и в запросе;
  2. Код состояния (Status Code) – три цифры. По коду состояния определяется дальнейшее содержимое сообщения и поведение клиента. Например, в случае, если был использован метод GET, и сервер предоставляет ресурс с указанным идентификатором, то такое состояние задаётся с помощью кода 200. Если сервер сообщает о том, что такого ресурса не существует — 404. Весь список кодов можно глянуть по ссылке: список кодов состояния.
  3. Пояснение – текстовое короткое пояснение к коду ответа для пользователя. Никак не влияет на сообщение и является необязательным.

Продолжаем рассматривать наш пример. После нашего запроса к ресурсу мы получаем от сервера ответ. Стартовая строка ответа содержит версию 1.1. Код состояние у нас 200, т.е. наш запрос был успешным. И пояснение OK – поясняет код состояния. index page

Далее идут заголовки, а после заголовок идет тело сообщения (обратите внимание, что оно обязательно отделено хотя бы одной пустой строкой). В качестве тела сообщения сервер отправляет документ в формате HTML, который и отображает в итоге нужную нам информацию на странице.

Безопасность

В HTTP не используется шифрование для передачи данных, но есть расширение, которое реализует упаковку передаваемых данных в криптографический протокол SSL или TLS. Называется это расширение HTTPS (HyperText Transfer Protocol Secure). Как правило для HTTPS-соединения используется TCP-порт 443. Данное расширение используется для защиты информации от перехвата, а также, как правило, обеспечивает защиту от атак вида man-in-the-middle, при условии, что будут использоваться шифрующие средства и сертификат сервера проверен и ему доверяют.

Простым языком об HTTP

Вашему вниманию предлагается описание основных аспектов протокола HTTP — сетевого протокола, с начала 90-х и по сей день позволяющего вашему браузеру загружать веб-страницы. Данная статья написана для тех, кто только начинает работать с компьютерными сетями и заниматься разработкой сетевых приложений, и кому пока что сложно самостоятельно читать официальные спецификации.

HTTP — широко распространённый протокол передачи данных, изначально предназначенный для передачи гипертекстовых документов (то есть документов, которые могут содержать ссылки, позволяющие организовать переход к другим документам).

Аббревиатура HTTP расшифровывается как HyperText Transfer Protocol, «протокол передачи гипертекста». В соответствии со спецификацией OSI, HTTP является протоколом прикладного (верхнего, 7-го) уровня. Актуальная на данный момент версия протокола, HTTP 1.1, описана в спецификации RFC 2616.

Протокол HTTP предполагает использование клиент-серверной структуры передачи данных. Клиентское приложение формирует запрос и отправляет его на сервер, после чего серверное программное обеспечение обрабатывает данный запрос, формирует ответ и передаёт его обратно клиенту. После этого клиентское приложение может продолжить отправлять другие запросы, которые будут обработаны аналогичным образом.

Задача, которая традиционно решается с помощью протокола HTTP — обмен данными между пользовательским приложением, осуществляющим доступ к веб-ресурсам (обычно это веб-браузер) и веб-сервером. На данный момент именно благодаря протоколу HTTP обеспечивается работа Всемирной паутины.

Также HTTP часто используется как протокол передачи информации для других протоколов прикладного уровня, таких как SOAP, XML-RPC и WebDAV. В таком случае говорят, что протокол HTTP используется как «транспорт».

API многих программных продуктов также подразумевает использование HTTP для передачи данных — сами данные при этом могут иметь любой формат, например, XML или JSON.

Как правило, передача данных по протоколу HTTP осуществляется через TCP/IP-соединения. Серверное программное обеспечение при этом обычно использует TCP-порт 80 (и, если порт не указан явно, то обычно клиентское программное обеспечение по умолчанию использует именно 80-й порт для открываемых HTTP-соединений), хотя может использовать и любой другой.

Как отправить HTTP-запрос?

Самый простой способ разобраться с протоколом HTTP — это попробовать обратиться к какому-нибудь веб-ресурсу вручную. Представьте, что вы браузер, и у вас есть пользователь, который очень хочет прочитать статьи Анатолия Ализара.

Предположим, что он ввёл в адресной строке следующее:

Соответственно вам, как веб-браузеру, теперь необходимо подключиться к веб-серверу по адресу alizar.habrahabr.ru.

Для этого вы можете воспользоваться любой подходящей утилитой командной строки. Например, telnet:

telnet alizar.habrahabr.ru 80

Сразу уточню, что если вы вдруг передумаете, то нажмите Ctrl + «]», и затем ввод — это позволит вам закрыть HTTP-соединение. Помимо telnet можете попробовать nc (или ncat) — по вкусу.

После того, как вы подключитесь к серверу, нужно отправить HTTP-запрос. Это, кстати, очень легко — HTTP-запросы могут состоять всего из двух строчек.

Для того, чтобы сформировать HTTP-запрос, необходимо составить стартовую строку, а также задать по крайней мере один заголовок — это заголовок Host, который является обязательным, и должен присутствовать в каждом запросе. Дело в том, что преобразование доменного имени в IP-адрес осуществляется на стороне клиента, и, соответственно, когда вы открываете TCP-соединение, то удалённый сервер не обладает никакой информацией о том, какой именно адрес использовался для соединения: это мог быть, например, адрес alizar.habrahabr.ru, habrahabr.ru или m.habrahabr.ru — и во всех этих случаях ответ может отличаться. Однако фактически сетевое соединение во всех случаях открывается с узлом 212.24.43.44, и даже если первоначально при открытии соединения был задан не этот IP-адрес, а какое-либо доменное имя, то сервер об этом никак не информируется — и именно поэтому этот адрес необходимо передать в заголовке Host.

Стартовая (начальная) строка запроса для HTTP 1.1 составляется по следующей схеме:

Например (такая стартовая строка может указывать на то, что запрашивается главная страница сайта):

Метод (в англоязычной тематической литературе используется слово method, а также иногда слово verb — «глагол») представляет собой последовательность из любых символов, кроме управляющих и разделителей, и определяет операцию, которую нужно осуществить с указанным ресурсом. Спецификация HTTP 1.1 не ограничивает количество разных методов, которые могут быть использованы, однако в целях соответствия общим стандартам и сохранения совместимости с максимально широким спектром программного обеспечения как правило используются лишь некоторые, наиболее стандартные методы, смысл которых однозначно раскрыт в спецификации протокола.

URI (Uniform Resource Identifier, унифицированный идентификатор ресурса) — путь до конкретного ресурса (например, документа), над которым необходимо осуществить операцию (например, в случае использования метода GET подразумевается получение ресурса). Некоторые запросы могут не относиться к какому-либо ресурсу, в этом случае вместо URI в стартовую строку может быть добавлена звёздочка (астериск, символ «*»). Например, это может быть запрос, который относится к самому веб-серверу, а не какому-либо конкретному ресурсу. В этом случае стартовая строка может выглядеть так:

Версия определяет, в соответствии с какой версией стандарта HTTP составлен запрос. Указывается как два числа, разделённых точкой (например 1.1).

Для того, чтобы обратиться к веб-странице по определённому адресу (в данном случае путь к ресурсу — это «/»), нам следует отправить следующий запрос:

GET / HTTP/1.1
Host: alizar.habrahabr.ru

При этом учитывайте, что для переноса строки следует использовать символ возврата каретки (Carriage Return), за которым следует символ перевода строки (Line Feed). После объявления последнего заголовка последовательность символов для переноса строки добавляется дважды.

Впрочем, в спецификации HTTP рекомендуется программировать HTTP-сервер таким образом, чтобы при обработке запросов в качестве межстрочного разделителя воспринимался символ LF, а предшествующий символ CR, при наличии такового, игнорировался. Соответственно, на практике бо́льшая часть серверов корректно обработает и такой запрос, где заголовки отделены символом LF, и он же дважды добавлен после объявления последнего заголовка.

Если вы хотите отправить запрос в точном соответствии со спецификацией, можете воспользоваться управляющими последовательностями \r и \n:

echo -en «GET / HTTP/1.1\r\nHost: alizar.habrahabr.ru\r\n\r\n» | ncat alizar.habrahabr.ru 80

Как прочитать ответ?

Стартовая строка ответа имеет следующую структуру:

Версия протокола здесь задаётся так же, как в запросе.

Код состояния (Status Code) — три цифры (первая из которых указывает на класс состояния), которые определяют результат совершения запроса. Например, в случае, если был использован метод GET, и сервер предоставляет ресурс с указанным идентификатором, то такое состояние задаётся с помощью кода 200. Если сервер сообщает о том, что такого ресурса не существует — 404. Если сервер сообщает о том, что не может предоставить доступ к данному ресурсу по причине отсутствия необходимых привилегий у клиента, то используется код 403. Спецификация HTTP 1.1 определяет 40 различных кодов HTTP, а также допускается расширение протокола и использование дополнительных кодов состояний.

Пояснение к коду состояния (Reason Phrase) — текстовое (но не включающее символы CR и LF) пояснение к коду ответа, предназначено для упрощения чтения ответа человеком. Пояснение может не учитываться клиентским программным обеспечением, а также может отличаться от стандартного в некоторых реализациях серверного ПО.

После стартовой строки следуют заголовки, а также тело ответа. Например:

Тело ответа следует через два переноса строки после последнего заголовка. Для определения окончания тела ответа используется значение заголовка Content-Length (в данном случае ответ содержит 7 восьмеричных байтов: слово «Wisdom» и символ переноса строки).

Но вот по тому запросу, который мы составили ранее, веб-сервер вернёт ответ не с кодом 200, а с кодом 302. Таким образом он сообщает клиенту о том, что обращаться к данному ресурсу на данный момент нужно по другому адресу.

В заголовке Location передан новый адрес. Теперь URI (идентификатор ресурса) изменился на /users/alizar/, а обращаться нужно на этот раз к серверу по адресу habrahabr.ru (впрочем, в данном случае это тот же самый сервер), и его же указывать в заголовке Host.

GET /users/alizar/ HTTP/1.1
Host: habrahabr.ru

В ответ на этот запрос веб-сервер Хабрахабра уже выдаст ответ с кодом 200 и достаточно большой документ в формате HTML.

Если вы уже успели вжиться в роль, то можете теперь прочитать полученный от сервера HTML-код, взять карандаш и блокнот, и нарисовать профайл Ализара — в принципе, именно этим бы на вашем месте браузер сейчас и занялся.

А что с безопасностью?

Сам по себе протокол HTTP не предполагает использование шифрования для передачи информации. Тем не менее, для HTTP есть распространённое расширение, которое реализует упаковку передаваемых данных в криптографический протокол SSL или TLS.

Название этого расширения — HTTPS (HyperText Transfer Protocol Secure). Для HTTPS-соединений обычно используется TCP-порт 443. HTTPS широко используется для защиты информации от перехвата, а также, как правило, обеспечивает защиту от атак вида man-in-the-middle — в том случае, если сертификат проверяется на клиенте, и при этом приватный ключ сертификата не был скомпрометирован, пользователь не подтверждал использование неподписанного сертификата, и на компьютере пользователя не были внедрены сертификаты центра сертификации злоумышленника.

На данный момент HTTPS поддерживается всеми популярными веб-браузерами.

А есть дополнительные возможности?

Протокол HTTP предполагает достаточно большое количество возможностей для расширения. В частности, спецификация HTTP 1.1 предполагает возможность использования заголовка Upgrade для переключения на обмен данными по другому протоколу. Запрос с таким заголовком отправляется клиентом. Если серверу требуется произвести переход на обмен данными по другому протоколу, то он может вернуть клиенту ответ со статусом «426 Upgrade Required», и в этом случае клиент может отправить новый запрос, уже с заголовком Upgrade.

Такая возможность используется, в частности, для организации обмена данными по протоколу WebSocket (протокол, описанный в спецификации RFC 6455, позволяющий обеим сторонам передавать данные в нужный момент, без отправки дополнительных HTTP-запросов): стандартное «рукопожатие» (handshake) сводится к отправке HTTP-запроса с заголовком Upgrade, имеющим значение «websocket», на который сервер возвращает ответ с состоянием «101 Switching Protocols», и далее любая сторона может начать передавать данные уже по протоколу WebSocket.

Что-то ещё, кстати, используют?

На данный момент существуют и другие протоколы, предназначенные для передачи веб-содержимого. В частности, протокол SPDY (произносится как английское слово speedy, не является аббревиатурой) является модификацией протокола HTTP, цель которой — уменьшить задержки при загрузке веб-страниц, а также обеспечить дополнительную безопасность.

Увеличение скорости обеспечивается посредством сжатия, приоритизации и мультиплексирования дополнительных ресурсов, необходимых для веб-страницы, чтобы все данные можно было передать в рамках одного соединения.

Опубликованный в ноябре 2012 года черновик спецификации протокола HTTP 2.0 (следующая версия протокола HTTP после версии 1.1, окончательная спецификация для которой была опубликована в 1999) базируется на спецификации протокола SPDY.

Многие архитектурные решения, используемые в протоколе SPDY, а также в других предложенных реализациях, которые рабочая группа httpbis рассматривала в ходе подготовки черновика спецификации HTTP 2.0, уже ранее были получены в ходе разработки протокола HTTP-NG, однако работы над протоколом HTTP-NG были прекращены в 1998.

На данный момент поддержка протокола SPDY есть в браузерах Firefox, Chromium/Chrome, Opera, Internet Exporer и Amazon Silk.

И что, всё?

В общем-то, да. Можно было бы описать конкретные методы и заголовки, но фактически эти знания нужны скорее в том случае, если вы пишете что-то конкретное (например, веб-сервер или какое-то клиентское программное обеспечение, которое связывается с серверами через HTTP), и для базового понимания принципа работы протокола не требуются. К тому же, всё это вы можете очень легко найти через Google — эта информация есть и в спецификациях, и в Википедии, и много где ещё.

Впрочем, если вы знаете английский и хотите углубиться в изучение не только самого HTTP, но и используемых для передачи пакетов TCP/IP, то рекомендую прочитать вот эту статью.

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

HTTP-запросы — что это

Протокол связи HTTP — HyperText Transfer Protocol был разработан специально для передачи данных и просмотра интернет-страниц. Каждое взаимодействие по HTTP выглядит как общение между пользователем и сервером: человек с помощью клиента делает запрос (HTTP Requests) к серверу, а сервер даёт ответ — допустим, отображает сайт в браузере.

Фактически запросы представляют собой некие информационные сообщения, которые клиент передаёт на сервер с целью выполнения какого-либо действия. У каждого HTTP Requests должен быть задан URL-адрес и метод, а основой выступает хедер (HTTP-заголовок).

Http запросы

HTTP-запросы наполнены несколькими текстовыми строками, которые закодированы в ASCII. Версии HTTP/1.1 и ранее предполагали использование данных в виде обычного текста. В более совершенной версии HTTP/2 текстовую информацию стали разделять на фреймы.

Структура HTTP-запросов

HTTP-запросы могут выглядеть следующим образом: GET https://www.cloud4y.ru/ HTTP/1.1

Здесь вы можете видеть, что в качестве метода используется GET, обращение идёт к ресурсу https://www.cloud4y.ru, а в качестве протокола используется версия HTTP/1.1.

Для большей наглядности изобразим это так:

Структура HTTP запроса

Традиционно запросы обладают структурой следующего вида:

  1. Стартовая строка. Необходима для описания запроса или статуса. В ней сообщается версия протокола и другие сведения. Это может быть запрашиваемый ресурс или код ответа (например, ошибки). Длина — ровно одна строчка.
  2. HTTP-заголовок. Выглядит как несколько строчек текста, в которых уточняется запрос или описывается содержимое тела сообщения.
  3. Пустая строка. Она необходима, чтобы сообщить об успешной отправке метаданных конкретного запроса.
  4. Тело запроса. В нём хранится информация о запросе или документ, который отправляется в ответе на запрос.

А теперь чуть более детально.

Стартовая строка

Стартовая строка HTTP-запроса включает в себя три основных компонента, метод запроса, его цель и версию протокола передачи данных.

Метод — короткое слово, которое указывает, что требуется сделать с запрашиваемым ресурсом. Чаще всего встречаются методы глагольной формы (GET, PUT или POST) или существительные (HEAD, OPTIONS). GET, например, даёт серверу понять, что пользователю требуются некие данные, а POST означает, что пользователь отправляет данные на сервер.

Цель запроса фактически является указателем нужного пользователю URL. Состоит из протокола, URL или IP-адреса, пути к хранящемуся на сервере ресурсу. Также в состав цели запроса могут входить указание порта, параметры запроса.

Версия используемого протокола передачи данных. Сейчас распространены версии HTTP/1.1 и HTTP/2. От протокола зависит структура данных, идущих вслед за стартовой строкой.

Отметим, что в стартовой строке могут храниться и другие полезные сведения. Например, User-Agent header — данные об используемом юзер-агенте, то есть браузере. Или Referer header — здесь подразумевается URL, с которого поступил запрос.

HTTP-заголовок

Заголовки выглядят как пара _имя:значение_. Строка не зависит от регистра, а структура значения определяется заголовком. Хедер выглядит как одна, порой чрезвычайно длинная строка. Заголовки используются для передачи вместе с запросом дополнительных сведений и могут принадлежать к одной из четырёх категорий.

  1. Главные заголовки — необходимы для любых типов сообщений и не зависят от данных, которые планируется передавать.
  2. Заголовки запроса — задают параметры запрашиваемых данных или определяют параметры со сведениями о совершающем запрос клиенте.
  3. Заголовки ответа — в них содержится информация об ответе сервера.
  4. Заголовки сущностей — позволяют описать содержимое тела сообщения.

Пустая строка

На самом деле эта строка не пуста, она содержит параметр CTRLF, обозначающий конец заголовка.

Тело запроса

Тело HTTP-запроса может быть не у всех запросов. Например, для методов GET, HEAD, DELETE, OPTIONS тело, как правило, не нужно. А вот для методов типа POST оно необходимо — чтобы отправлять на сервер информацию для обновления, например.

Тело запроса условно делится на две категории, одноресурсное и многоресурсное. К первой категории относятся тела запроса, состоящие из одного обособленного файла с двумя заголовками: Content-Type и Content-Length.

Многоресурсные же тела состоят из нескольких частей, каждая из которых содержит свой бит информации. Эти части связаны с HTML-формами.

Помимо HTTP-запросов существуют ещё и ответы. Но это уже совсем другая история.

Протокол http

Мы уже успешно запустили наше рабочие место. И мне кажется самое время заняться теорией и понять как же все это будет работать. Если же вы хотите сразу кинутся в бой вы можете пропустить данную статью, и вернутся к ней тогда когда посчитаете нужным.

Протокол http

Первое что вам надо поднимать что сайт, это не монолитное приложение, а клиент северное. Причем мы с вами будет писать код который будет исполнится как на стороне клиента так и на стороне сервера, но при этом сами клиент и сервер нам будут практически не доступны. В роли сервера у нас будет выступать апачь который вы сможете конфигурировать в соответствии с соглашением с хостером*, в роли клиента браузер пользователя, стоит отметить, что браузеров таки не так и мало они имеют свои особенности(что либо в них изменять мы и вовсе не сможем). Общение между клиентом(веб сервером, в нашем случае апачи) и клиентом(любым браузером) происходит по средствам http протокола.

Давайте детальное рассмотрим http протокол( HyperText Transfer Prоtocоl — «протокол передачи гипертекста»). Для начала разберемся, что вообще такое протокол передачи данных, если максимально просто то это определенное соглашение о форме данных. То есть в каком виде будет происходить передача данных между программами. http является протоколом прикладного уровня передача данных, в основе которого лежит технология “клиент-сервер”.

Теперь подробнее рассмотрим что значит данное определение. Прикладной уровень обозначает, что данный протокол самого высокого уровня и предназначен непосредственно и базируется на ряда протоколов более низкого уровня(в первую очередь на TCP\IP). Слова HyperText, обозначат форму данных, общение будет происходить в простом текстовом формате с заменой спец символов кодами.Технология клиент сервер подразумевает в данном случае то, что клиент(браузер или js код работающий на стороне браузера ) отправляет запрос серверу и получает от него(сервера) ответ. И не как иначе. Сервер не может отправить запрос или какие либо данные браузеру сам по себе(это очень важно и следует запомнить).

И так мы поняли что схема общения между сервером и браузером, идет исключительно по схеме запрос от браузера ответ от сервера. Давайте рассмотри запрос.

Запрос состоит из стартовой строки, заголовков(хедера), и тела(присутствует не всегда).

Стартовая строка стоит из название метода, URL(путь к запрашиваемому ресурсу) и версии протокола.

Метод это действие которое мы хотим предпринять над ресурсом. Записывается в виде короткого слова заглавными английскими буквами. Методов существует довольно много я опишу только некоторые.

GET — получить данные с сервера(к примеру контент веб страницы).

POST — передачу данных серверу(исконно использовать для создания поста, скажем на форуме).

OPTIONS — определяет возможности конкретного узла или веб сервера.

PUT — для загрзки содержимого запроса по заданной URL

DELETE — для удаления ресурса.

Я причислил далеко не все методы,за более подробной информацией можно обратится к справочной литературе или стандартам.

В случае если сервер не распознал запрос он должен вернуть вернуть статус 501 (Not Implemented). В случае если данный метод не поддерживается указанным ресурсом будет возвращен статус 405 (Method Not Allowed).

Теперь рассмотри заголовки(хедеры). По сути это пара параметр(name) значение(value) разделенные “:”. Мы можем передавать таким образом произвольные значения. Причем в теле значение также могут быть “:” Небуду детльно останвливатся на конкртных хедрах отмечу пожалуй, хедр hots. Который указывает, на узел с которым мы работаем.

Телом запроса может является произвольная информация отделённое одной пустой строкой. Важно что тело запроса не обязательно( в GET запросе к примеру тела вообще не может быть)

Теперь стоит отметить способы передачи данных серверу. Как вы поняли мы можем переедать ту или иную информацию при помощи хедеров(обычно это служебная информация а не данные), и само собой тела запроса. существует еще 1 способ, передачи данных по средствам URL целевого ресурса после символа “?”

Ну с запросом вроде бы разобрались теперь давайте рассмотрим ответ.

Ответ также состоит из стартовой строки, заголовков и теле ответа.

Стартовая строка стоит из http/<версия hhtp> <код состояния> <пояснение>

данный код сообщает об успехе выполнения запроса.

Давате подробние остановимся на кодах состояния. На данным монет существует 5 классов кодов

1xx Информационный

Данные коды информируют о процессе передачи. Сам ответ обычно недодержит нечего, за исключением нескольких служебных хедров.

2xx Успех

Сообщения данного класса информируют о случаях успешного принятия и обработки запроса клиента. В зависимости от статуса сервер может ещё передать заголовки и тело сообщения.

3xx Перенаправление

Данный класс обозначает что для успеха операции клиенту придется сделать другой запрос.

4xx. Ошибка клиента

Данный класс указывают на ошибку клиента.

5xx Ошибка сервера

Данный класс указывает на ошибку сервера.

После стартовой строки идет идут хедеры и тело ответа(аналогично с запросом).

протокол http

Дополнительно стоит отметить что зачастую TCP на который базируется данный протокол разрывается сразу после получения ответа(современный браузеры правда в рамках одной серии могут также выкачать контент всей страницы). Для сохранения информации пользователя и о пользователе используется механизм cookies. О них будет в следующей статье.

Данная статья была предназначена для того, чтобы дать общее преставление о http протоколе и не как не претендует на полное и исчерпывающие его описания. Для этого существует справочная литература и стандарты.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *