Вы уже знаете, что для передачи информации источник и приёмник должны использовать один и тот же протокол — набор правил и соглашений, определяющих порядок обмена данными в сети. В Интернете в качестве стандарта принят протокол TCP/IP, разработанный в 1974 г. На самом деле, это не один протокол, а целое семейство, название которого происходит от двух самых важных протоколов — TCP (англ. Transfer Control Protocol — протокол управления передачей) и IP (англ. Internet Protocol — межсетевой протокол).
Попробуем разобраться, почему для работы в Интернете нужно использовать несколько протоколов (рис. 7.15). Предположим, что браузер на компьютере А запрашивает веб-страницу с сервера, который находится на компьютере Б. «Разговор» между браузером и сервером идет с помощью протокола HTTP (англ. HyperText Transfer Protocol — протокол передачи гипертекста).
Браузер и веб-сервер не могут связаться напрямую. Чтобы послать запрос серверу, браузер передаёт адрес сервера и текст запроса операционной системе, которая вызывает драйвер протокола TCP.
Структура HTTP запроса
Рис. 7.15
Задача драйвера TCP — установить соединение с удалённым компьютером и обеспечить доставку данных. Передаваемый блок данных разбивается на пакеты (размер пакета обычно не превышает 1,5 Кбайт), и каждый пакет передаётся на следующий уровень — драйверу протокола IP, который посылает его в сеть по указанному адресу.
Обычно при работе в Интернете компьютеры А и Б напрямую не связаны, поэтому задача протокола IP — определить узел-маршрутизатор 1 , на который нужно отправить пакет, чтобы он дошёл до компьютера Б. Когда маршрут определён, пакет (с добавленной служебной информацией) передаётся на физический уровень (например, в сетевую карту), где передаётся просто как цепочка байтов. Протоколы физического уровня могут быть любыми, они не определены в стандарте.
1 Маршрутизаторы обмениваются информацией друг с другом, сообщая о выходе из строя или подключении каких-то участков сети. Таблицы маршрутизации обновляются автоматически, так что при выборе маршрута пакетов учитывается фактическая структура сети в данный момент.
Протокол IP не гарантирует доставку пакетов, поэтому драйвер TCP должен (с помощью установленного соединения) проверить, что данные получены, и в случае сбоя передать пакет повторно. На другом конце соединения драйвер TCP «собирает» пакеты в единый блок данных и передаёт на уровень приложения (запрос дошёл до сервера).
Таким образом, в Интернете используется четырёхуровневая система протоколов, каждый из которых «занимается своим делом»:
1) уровень приложений — формат запросов и ответов, которыми обмениваются программы;
2) транспортный уровень (TCP) — правила пакетной передачи блоков данных без учёта их содержания;
Web Testing. Урок 2. Протокол HTTP. Структура запроса/ответа. Методы HTTP
3) сетевой уровень (IP) — правила выбора маршрута для отдельных пакетов без гарантии их доставки;
4) физический уровень — правила передачи отдельных байтов по кабельной, оптоволоконной или другой линии связи.
На уровне приложений (который находится «ближе всего» к пользователю) чаще всего применяются протоколы:
HTTP — для передачи веб-страниц;
FTP — для передачи файлов;
SMTP — для передачи на сервер сообщений электронной почты;
POP3 или IMAP — для приёма сообщений электронной почты с сервера.
Существуют и другие протоколы (для чатов, новостных групп и т. п.), но все они используют TCP и IP соответственно на транспортном и сетевом уровнях.
Следующая страница Вопросы и задания
Cкачать материалы урока
Источник: xn—-7sbbfb7a7aej.xn--p1ai
HTTP-запросы от А до Я
Основная масса приложений и веб-страниц взаимодействует с глобальной сетью. Такие коммуникации на смартфонах, компьютерах, а также планшетах и другом оборудовании реализуются при помощи специальных HTTP-запросов.
Далее предстоит рассмотреть HTTP и соответствующие запросы более подробно. Предложенная в статье информация ориентирована на пользователей, которые уже немного разбираются в особенностях функционирования Сети, а также имели опыт в разработке.
HTTP-протокол – это…
HTTP – это HyperText Transfer Protocol. Если перевести аббревиатуру с английского языка, то ее значение будет звучать как «протокол передачи гипертекста». Соответствующий компонент представлен протоколом прикладного уровня, который используется для предоставления доступа ко всем ресурсам в пределах Всемирной паутины.
В виде гипертекста понимается текст, который формируется в понятном для пользователя (человека) представлении. Он может включать в себя ссылки на различные дополнительные ресурсы.
HTTP описывается при помощи спецификации RFC 2016. Его наиболее распространенная версия – это HTTP/2. Иногда разработчикам и системным администраторам приходится все еще иметь дело с более ранней версией – HTTP/1.1.
Принцип работы
Перед изучением запросов по упомянутому протоколу нужно выяснить, как происходит обмен данными. HTTP использует при работе клиент-серверную модель. В ней участвуют клиент и сервер.
Обмен информацией в Сети осуществляется по следующему принципу:
- Клиент формирует запрос на некоторый ресурс и отправляет его на сервер.
- Сторона сервера принимает запрос. На этом этапе происходит обработка поданной «команды».
- Серверная сторона возвращает клиенту ресурс, который был запрошен изначально.
По умолчанию для коммуникации по HTTP используется порт 80. Вместо него допускается выбор другого порта подключения – вручную. Здесь все зависит непосредственно от конфигурации конкретного веб-сервера.
HTTP-сообщения: о запросах и ответах
Server и Client в клиент-серверной модели обмениваются запросами. Информация в рамках функционирования рассматриваемого протокола осуществляется за счет HTTP-сообщений. Они встречаются в нескольких интерпретациях:
- Запрос или HTTP Request. Такое название получили сообщения, которые отправляются клиентом на сервер для вызова (инициации) выполнения определенных действий. Обычно запрос отправляется на server, чтобы получить доступ к тому или иному ресурсу. Его основой является HTTP заголовок.
- Ответы или HTTP Responses. Это сообщения, которые сервер будет отправлять в качестве ответа на клиентский запрос.
Сообщение (query) помогает передавать информацию в текстовом виде, которая записана в несколько строчек. Оно может быть направлено браузеру или host.
Структура HTTP-сообщения
Структура HTTP запросов и ответов обычно одинаковая. Она включает в себя такие компоненты как:
- Строка состояния – start line. Применяется для того чтобы описать версию используемого протокола и указать иные данные. Пример – запрашиваемый ресурс или код ответа. Стартовая строка занимает ровно одну строчку.
- HTTP-заголовки – HTTP Headers. Это несколько строчек текста, заданные в определенном формате. Они или уточняют запрос, или описывают тело сообщения.
- Пустая строка. Она указывает на то, что все имеющиеся метаданные для ответа или запроса были отправлены «получателю».
- Опциональное тело сообщения. Этот компонент включает в свой состав данные, связанные с запросом, или документ (пример – HTML-страница), передаваемый в ответе.
Далее предстоит рассмотреть перечисленные параметры HTTP запроса более подробно.
Стартовая строка
Стартовая строка включает в себя всего три компонента:
- Метод запроса. Он помечается как method или verb. Соответствующее слово указывает на то, что именно необходимо проделать с запрошенным ресурсом. Пример – при помощи метода GET можно запросить некоторую информацию по тому или иному адресу. POST ссылается на то, что информация должна быть помещена на имеющийся сервер.
- Цель. Она реализована в виде указателя ресурса URL. Он включает в себя: протокол, доменное имя (или IP-адрес), путь к конкретному ресурсу на сервере. В качестве дополнительных параметров может включать в себя указание порта, несколько свойств HTTP Queries и иные опциональные компоненты.
- Версия используемого протокола. Определяет структуру следующих за стартовой строкой данных.
Выше – пример стартовой строки. Соответствующая запись указывает на то, что в виде метода используется GET. Обращаться система будет к ресурсу /index.html, используя для этого протокол версии HTTP/1.1.
О методах
Методы используются для указания конкретных действий. Они характеризуют манипуляции, которые пользователь хочет выполнить на серверной части после получения соответствующим компонентом поданного query. Некоторые такие сообщения позволяют браузеру (который в основном выступает в качестве источника данных от клиента) направлять дополнительные данные в тело запроса. Пример – заполненную пользователем электронную форму или документ.
Методы имеют следующую структуру:
- заголовки запроса;
- заголовки общего назначения;
- заголовки представления.
Методов в рассматриваемом языке гипертекста очень много. Ниже приведены наиболее распространенные из них.
Используемый метод | Краткая характеристика |
GET | Запрашивает определенный ресурс. Дополнительные сведения могут быть переданы через строку запроса (Query String) в составе URL. |
POST | Команда, отправляющая информацию на сервер. С ее помощью можно работать с различными типами документов: текстом, PDF и так далее. Данный метод часто применяется для отправки информации и загрузки данных на веб-сайт. |
Head | Позволяет получать только заголовки, которые сервер бы вернут при получении GET-команды по тому же ресурсу. Используется соответствующий запрос для того, чтобы узнать размер запрошенного ресурса перед его непосредственной загрузкой. |
PUT | Создает (размещает) новые компоненты на сервере. |
Delete | Отвечает за удаление существующих ресурсов на сервере. |
Options | Запрашивает данные о сервисе, включая информацию о допустимых для применения на серверной стороне HTTP-методов. |
Patch | Дает возможность частично изменять ресурс по выбранному адресу. |
Изучая HTTP команды, необходимо рассмотреть все их элементы. У стартовой строки также есть URL и информация о версии. Все это необходимо знать каждому разработчику.
Информация о URL
В HTTP query есть в стартовой строке поддерживается URL. Он представлен строкой, в которой указывается запрошенных ресурс и некоторые его параметры. Применение соответствующего компонента связано с иными элементами протокола:
- Scheme. Это поле, которое используется для указания используемого протокола. Помечается как двоеточие и два слеша (://).
- Host. Позволяет указать местоположение ресурса. В нем может размещаться доменное имя или IP-адрес.
- Port. Дает возможность задать номер порта, по которому необходимо обращаться к серверу. Начинается с двоеточия, после которого указывается соответствующие параметры. Если port отсутствует, данные компонент будет выбираться по умолчанию в соответствие с указанным значением Scheme.
- Path. Компонент HTTP, указывающий на ресурс, к которому обращается пользователь. Если параметр отсутствует, сервер вернет указатель по умолчанию.
- Query String. Компонент HTTP, который начинается со знака вопроса. За ним указывается пара «параметр–значение». Между соответствующими сведения ставится символ равенства. Query String можно передавать несколько параметров одновременно. Для этого используется разделитель –
- большая часть заголовков в сообщениях пропадала;
- отсутствовала возможность мультиплексирования.
- Общее назначение. Такие заголовки будут применяться ко всему сообщению.
- Заголовки запроса. Они помогают уточнять простую информацию о запросе, сообщая дополнительный контекст или накладывая ограничения при помощи логических условий.
- Заголовки представления. Они используются для непосредственного описания формата данных в сообщении и используемой кодировки. Добавлять их к requests необязательно.
- Версия протокола.
- Код состояния. Он указывает, насколько успешно была произведена обработка имеющегося запроса.
- Пояснение. Так называется короткое текстовое описание к коду состояния. Оно применяется для того, чтобы сделать понимание и восприятие «команды» при просмотре ответа более комфортным.
- «Network engineer«;
- «Network engineer. Basic«.
- 202 Accepted: запрос принят, но может не содержать ресурс в ответе. Это полезно для асинхронных запросов на стороне сервера. Сервер определяет, отправить ресурс или нет.
- 204 No Content: в теле ответа нет сообщения.
- 205 Reset Content: указание серверу о сбросе представления документа.
- 206 Partial Content: ответ содержит только часть контента. В дополнительных заголовках определяется общая длина контента и другая инфа.
Все перечисленные недостатки были перекрыты HTTP/2. В них сообщения стали разбиваться на фреймы, встраиваемые в поток информации.
Фреймы данные (тело сообщения) отделяются от фреймов заголовка. Это помогло добиться сжатия. С возникновением потоков возникло и мультиплексирование – теперь удается обойтись одним соединением для одновременного подключения нескольких потоков.
Заголовки
В HTTP запросе может передаваться большое количество заголовков. Все они делятся на несколько категорий:
Выше перечислены наиболее частые и распространенные заголовки (источник — https://selectel.ru/blog/http-request/).
Тело команды
Тело – это завершающая часть HTTP-команды. Она поддерживается не всеми методами. Пример – отсутствие у Het, Head, Delete, Options. Некоторые виды queries способны отправлять данные на сервер в теле запроса. Наиболее распространенный вариант – это Post.
Ответы HTTP
Первая часть основ работы с HTTP-командами изучена. Теперь необходимо разобраться со структурой и особенностями ответов сервера. HTTP-ответ – это сообщение, которое сервер направляет клиенту в ответ на запрос. У него точно такая же структура, как и в случае с query.
Строка статуса ответа
Стартовая строка ответа – это строка статуса запроса (status line). Она включает в себя такие компоненты как:
Выше – пример строки состояния.
Код состояния и статусы
Код состояния используется для того, чтобы сообщать клиентам статус посланной ими «команды». Сервер HTTP способен возвращать коды в одной из пяти доступных форм:
Тип (категория) | Краткое описание |
1xx | Информативные коды. Они никак не отражаются на том, как сервер должен обрабатывать запрос. |
2xx | Будут возвращаться, если «команда» обработана успешно. |
3xx | Включает в себя коды, которые будут возвращаться при необходимости перенаправления клиента сервером. |
4xx | Указывают на то, что со стороны клиента отправляются некорректные запросы. Пример – отсутствие поддерживающего метода или обращение к сервису, к которому отсутствует доступ. |
5xx | Используются при возникновении ошибок. |
Наиболее распространенными кодами ответов выступают следующие варианты:
Тип | Характеристика |
200 ok | Успешная обработка команды. Тело ответа обычно включает в себя запрошенный сервис. |
302 Found | Перенаправление пользователя на другой URL. |
400 Bad Request | Отображается, если «команда», сформированная клиентом, написана с ошибками. Пример – отсутствие символов, указывающих на факт завершения строки. |
403 Forbidden | Отсутствие достаточных прав доступа по указанному uri. Встречается, если сервер обнаружил опасные (вредоносные) данные, которые отправлены с клиентской стороны. |
404 Not Found | Обращение к несуществующему веб-проекту. |
500 Internal Error | Указывает на невозможность обработки посланной «команды» по определенным причинам. |
Существуют не только основные коды состояния, но и коды состояния, объявляемые крупными сетевыми провайдерами и серверными платформами.
Заголовки ответа
Заголовки ответа или Response Headers – элемент, используемый для уточнения ответа. Он никак не влияет на содержимое отправленного сообщения. Существует в том же формате, что и остальные заголовки. Указывается как «Имя–Значение». В качестве разделителя используется двоеточие.
Вот наиболее распространенные заголовки ответа:
Категория | Пример | Характеристика |
Server | Server: nginx | Включает в себя информацию о сервере, который обрабатывал «команду». |
Set-Cookie | Set-Cookie–PHPSESSID-bf42938f | Включает в себя куки, необходимые для идентификации клиента. Браузер будет парсить куки и сохранять их в своем хранилище для дальнейших «команд». |
www-Authenticate | WWW-Authenticate: BASIC realm = «localhost» | Уведомление для клиента о типе аутентификации, необходимой для доступа к запрашиваемому ресурсу. |
Остальные заголовки ответа можно посмотреть в официальной документации. Она есть не только на английском (eng), но и на русском (ru) языке.
Тело ответа
Последняя часть – это тело ответа. Оно поддерживается почти всеми «командами», но не является обязательным компонентом. Коды 201 Created или 204 No Content не поддерживают этот компонент. Они передают в своих заголовках необходимые данные и content-type.
Теперь понятно, что собой представляет строка запроса и из чего она состоит. Лучше разобраться в соответствующем вопросе помогут специальные дистанционные компьютерные курсы. На них с нуля научат не только разрабатывать программное обеспечение, но и работать с базами данных, а также HTTP-командами. В конце обучения выдается сертификат установленного образца.
P. S. Интересуют компьютерные сети, сетевые технологии, протоколы передачи данных? Обратите внимание на следующие курсы в Otus:
Источник: otus.ru
HTTP: протокол, который каждый разработчик должен знать (часть 1)
HTTP — это протокол передачи гипертекста между распределёнными системами. По сути, http является фундаментальным элементом современного Web-а. Как уважающие себя веб разработчики, мы должны знать о нём как можно больше.
Давайте взглянем на этот протокол через призму нашей профессии. В первой части пройдёмся по основам, посмотрим на запросы/ответы. В следующей статье разберём уже более детальные фишки, такие как кэширование, обработка подключения и аутентификация.
Также в этой статье я буду, в основном, ссылаться на стандарт RFC 2616: Hypertext Transfer Protocol — HTTP/1.1.
Основы HTTP
HTTP обеспечивает общение между множеством хостов и клиентов, а также поддерживает целый ряд сетевых настроек.
В основном, для общения используется TCP/IP, но это не единственный возможный вариант. По умолчанию, TCP/IP использует порт 80, но можно заюзать и другие.
Общение между хостом и клиентом происходит в два этапа: запрос и ответ. Клиент формирует HTTP запрос, в ответ на который сервер даёт ответ (сообщение). Чуть позже, мы более подробно рассмотрим эту схему работы.
Текущая версия протокола HTTP — 1.1, в которой были введены некоторые новые фишки. На мой взгляд, самые важные из них это: поддержка постоянно открытого соединения, новый механизм передачи данных chunked transfer encoding, новые заголовки для кэширования. Что-то из этого мы рассмотрим во второй части данной статьи.
URL
Сердцевиной веб-общения является запрос, который отправляется через Единый указатель ресурсов (URL). Я уверен, что вы уже знаете, что такое URL адрес, однако для полноты картины, решил всё-таки сказать пару слов. Структура URL очень проста и состоит из следующих компонентов:
Протокол может быть как http для обычных соединений, так и https для более безопасного обмена данными. Порт по умолчанию — 80. Далее следует путь к ресурсу на сервере и цепочка параметров.
Методы
С помощью URL, мы определяем точное название хоста, с которым хотим общаться, однако какое действие нам нужно совершить, можно сообщить только с помощью HTTP метода. Конечно же существует несколько видов действий, которые мы можем совершить. В HTTP реализованы самые нужные, подходящие под нужды большинства приложений.
GET: получить доступ к существующему ресурсу. В URL перечислена вся необходимая информация, чтобы сервер смог найти и вернуть в качестве ответа искомый ресурс.
POST: используется для создания нового ресурса. POST запрос обычно содержит в себе всю нужную информацию для создания нового ресурса.
PUT: обновить текущий ресурс. PUT запрос содержит обновляемые данные.
DELETE: служит для удаления существующего ресурса.
Данные методы самые популярные и чаще всего используются различными инструментами и фрэймворками. В некоторых случаях, PUT и DELETE запросы отправляются посредством отправки POST, в содержании которого указано действие, которое нужно совершить с ресурсом: создать, обновить или удалить.
Также HTTP поддерживает и другие методы:
HEAD: аналогичен GET. Разница в том, что при данном виде запроса не передаётся сообщение. Сервер получает только заголовки. Используется, к примеру, для того чтобы определить, был ли изменён ресурс.
TRACE: во время передачи запрос проходит через множество точек доступа и прокси серверов, каждый из которых вносит свою информацию: IP, DNS. С помощью данного метода, можно увидеть всю промежуточную информацию.
OPTIONS: используется для определения возможностей сервера, его параметров и конфигурации для конкретного ресурса.
Коды состояния
В ответ на запрос от клиента, сервер отправляет ответ, который содержит, в том числе, и код состояния. Данный код несёт в себе особый смысл для того, чтобы клиент мог отчётливей понять, как интерпретировать ответ:
1xx: Информационные сообщения
Набор этих кодов был введён в HTTP/1.1. Сервер может отправить запрос вида: Expect: 100-continue, что означает, что клиент ещё отправляет оставшуюся часть запроса. Клиенты, работающие с HTTP/1.0 игнорируют данные заголовки.
2xx: Сообщения об успехе
Если клиент получил код из серии 2xx, то запрос ушёл успешно. Самый распространённый вариант — это 200 OK. При GET запросе, сервер отправляет ответ в теле сообщения. Также существуют и другие возможные ответы:
3xx: Перенаправление
Своеобразное сообщение клиенту о необходимости совершить ещё одно действие. Самый распространённый вариант применения: перенаправить клиент на другой адрес.
4xx: Клиентские ошибки