Как стать автором
Обновить

Методы HTTP — запроса

Тестирование IT-систем *Тестирование веб-сервисов *
Ожидает приглашения

В этой статье рассмотрим методы протокола HTTP и их функционал с позиции тестировщика. Рассмотрим также менее популярные (и используемые) методы, как: OPTIONS, TRACE, HEAD, CONNECT.

Протокол HTTP

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

HTTP - это протокол прикладного уровня, который находится на вершине “пирамиды уровней”, как в сетевой модели TCP/IP, так и в модели OSI. Данный уровень регламентирует взаимодействие пользователя и сети.

Другие протоколы аналогичного уровня:

  • FTP - предназначен для передачи файлов

  • SMTP - используется для отправки электронной почты

  • POP3 - используется для получения электронной почты

  • DNS - применяется для работы системы доменных имен (поиска IP-адреса по “человекопонятному” имени веб-сайта)

HTTP - запрос и его структура

Взаимодействие клиента с сервером осуществляется посредством запроса по протоколу HTTP. У него следующая структура: стартовая строка, заголовки и тело.

Стартовая строка сообщает ключевую информацию о запросе и состоит из метода запроса (да, дойдем и до темы статьи), URL (Uniform Resource Locator) и версии протокола.

Пример стартовой строки:

GET <https://www.aviasales.ru/?params=SVX1> HTTP/1.1

GET - метод запроса

URL - [<https://www.aviasales.ru/?params=SVX1>](<https://www.aviasales.ru/?params=SVX1>)

Версия HTTP - HTTP/1.1

Заголовки:

  • Основные заголовки

Среди них есть такие, как Date (показывает дату и время, когда был создан запрос), Cache-Control (дает инструкции по кэшированию) и Connection (указывает нужно ли закрывать соединение после завершения запроса).

  • Заголовки запроса

Здесь часто можно встретить User-Agent (указывает на окружение, из которой был отправлен запрос; браузер, ОС), Accept-Language (человеческие языки, которые понимает клиент), Referer (URL ресурса, с которого был переход на текущую страницу), а Accept-Encoding (описывает кодировку данных, которую клиент может понимать; например, частый вариант gzip deflate поясняет, что клиент принимает данные, сжатые методом gzip по алгоритму deflate).

Заголовок Accept, в свою очередь, указывает те типы контента, которые клиент способен понять, к примеру: text/html, application/xml.

Cookie - необязательный заголовок, который передает куки, которые сохранены для данного сервера.

If-Modified-Since - содержит дату и время версии запрашиваемого ресурса, с которыми сравнивается текущая версия. Только в случае, если эти даты не совпадают и ресурс был обновлен после указанной даты, сервер отправляет клиенту текущую версию ресурса. Иначе отправляется ответ 304 (Not Modified) и заголовок ответа Last-Modified будет содержать данные последнего обновления.

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

  • Заголовки сущности

Content-Length: размер отправленного запроса в байтах.

Content-Type: указывает на формат отправляемых данных (POST-запрос, например), содержит информацию по кодировкам (charset=UTF-8, как вариант).

Тело запроса:

В теле запроса передаются данные, которые клиент хочет передать на сервер. Тело - необязательный элемент запроса, обычно только запросы POST, PUT, PATCH отправляют данные в body. Здесь могут передаваться, например, данные в формате JSON / XML в качестве параметров для частичного или полного обновления информации, для создания новых записей в базе данных через сервер.

HTTP-методы

*Если метод кэшируемый, то ответ сервера можно сохранять для дальнейшего использования, не выполняя повторных запросов. GET, HEAD кэшируются, POST и PATCH - только при соблюдении определенных условий.

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

GET

Пожалуй, самый известный метод HTTP-запроса, предназначенный для получения информации с сервера. Из-за того, что у GET-запроса нет тела, параметры мы можем передать после знака вопроса в конце URL. Задаются они по схеме ключ=значение и разделяются между собой амперсандом (&). Но именно поэтому запрос GET является менее безопасным, чем POST, так как передаваемая информация видна в URL. В ответе возвращается информация в формате, указанном в заголовке ответа Content-type.

Из нюансов: у запроса нет тела, метод кэшируемый* и идемпотентный**.

HEAD

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

Метод идемпотентный и кэшируемый.

POST

Используется для отправки информации на ресурс. Запрос приводит к изменениям на сервере, многократное применение запроса POST может привести к дублировании записей в БД, в отличие от запроса PUT, который полностью перезаписывает данные на ресурсе, не создавая новую сущность. Содержит тело, которое может быть в виде xml / html / json или в в простом текстовом формате.

Не является идемпотентным, обычно не кэшируется.

PUT

Предназначен для изменения данных на ресурсе, отправка запроса с методом PUT полностью обновить запись на ресурсе. У запроса всегда присутствует тело, где передается информация для ресурса. В случае, если записи не существует, то создастся новая запись, как при POST.

Метод является идемпотентным, но не кэшируемым.

PATCH Благодаря отправке запроса с методом PATCH можно частично изменять указанный ресурс. У запроса обязательно должно быть тело, где передаются параметры для корректировки данных на стороне сервера (форматы возможны, как в теле POST). Если вы любите аналогии, то знайте, что Mozilla Docs говорит нам, что PATCH похож на UPDATE в концепции CRUD для работы с базами данных.

Метод не является ни кэшируемым, ни идемпотентным.

DELETE

Метод позволяет отправить запрос на удаление указанной сущности. У запроса может быть тело, но оно необязательно. В нем можно указать параметры для поиска записи в базе данных и ее последующего удаления.

Метод не кэшируется, но он идемпотентен.

OPTIONS

Данный HTTP-метод позволяет получить сведения о деталях соединения с ресурсом. Благодаря данному методу можно узнать какие другие методы допустимы при обращении к ресурсу (передается в ответе в хэдере Allow). Если в стартовой строке вместо URI передается звездочка (*), то запрос направлен ко всему серверу, а не к конкретному ресурсу.

Запрос с подобным методом идемпотентен, не кэшируется, у запроса нет тела.

CONNECT

Метод дает возможность установить связь с ресурсом, организовывает своеобразный “туннель”. Может использоваться для установления соединения с ресурсами, которые применяют шифрование соединения по SSL. Клиент отправляет запрос прокси-сервер, который устанавливает зашифрованное соединение с сервером, устанавливая канал, по которому клиент и сервер могут безопасно обмениться сообщениями.

У запроса CONNECT нет тела, данный метод не является ни идемпотентным, ни кэшируемым.

TRACE

Позволяет следить за тем, что происходит с запросом на пути к целевому ресурсу, как изменяется запрос промежуточными серверами, например, прокси-серверами. Метод предназначен прежде всего для целей диагностики. Если метод доступен для ресурса, то в ответ на запрос TRACE сервер “отразит” в ответ сам запрос в изначальном виде, который был получен.

Запрос не имеет тела, метод идемпотентен, кэшируется.

Резюме

Из рассмотренных выше методов самыми часто встречающимися в работе тестировщика являются GET, POST, PUT, DELETE и PATCH. Остальные методы являются более техническими и обслуживающими, поэтому не используется регулярно в повседневной работе. Знание методов, их предназначения пригодятся при тестировании веб-сайтов, API и важны для формирования понимания того, как изнутри устроена структура HTTP-запросов.

Ресурсы для статьи:

https://developer.mozilla.org/ru/docs/Web/HTTP/Methods

https://ru.wikipedia.org/wiki/HTTP

https://developer.mozilla.org/ru/docs/Web/HTTP/Messages

https://developer.mozilla.org/ru/docs/Web/HTTP/Overview

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.