WEB тестирование, Тестирование ПО

Понятие HTTP

HTTP (Hyper Text Transfer Protocol) – широко распространённый протокол передачи данных, изначально предназначенный для передачи гипертекстовых документов. По умолчанию используется 80-ый порт.

HTTPS (Hyper Text Transfer Protocol Secure)— безопасный протокол передачи гипертекста. Это расширение протокола HTTP, поддерживающее шифрование посредством криптографических протоколов SSL и TLS. По умолчанию используется 443-ий порт.

Спецификация HTTP (и HTTPS) определяет то, как запросы к серверу должны быть построены, и то, как сервер должен отвечать на эти запросы.

Основные свойства HTTP:

  • Не зависит от соединения. Для отправки запроса клиент устанавливает соединение с сервером и отсоединяется после отправки запроса. Сервер, в свою очередь, обрабатывает запрос и устанавливает соединение с клиентом для отправки ответа и отсоединяется после нее. Ни клиент, ни сервер не «знают» ничего о состоянии друг друга до начала соединения и после его окончания.
  • Не привязан к конкретному типу данных. Можно передавать любой тип данных при условии, что и клиент, и сервер способен работать с выбранным типом данных.
  • Взаимодействует только через соединение. Клиент и сервер могут взаимодействовать друг с другом только с помощью запроса. Из-за этой особенности ни клиент, ни сервер не могут получить информацию за пределами запроса.

Запросы HTTP

Клиент отправляет запрос на сервер в виде метода, URL и версии протокола, после которого идет некоторое сообщение, которое и содержит данные запроса.

Разберем подробнее каждую из частей запроса.

Method (метод) — это действие, которое мы хотим произвести над ресурсом на сервере. Их достаточно большое количество, но выделим основные 4:

  • GET — предназначен для получения ресурса с сервера;
  • POST — отправляет данные на сервер с созданием новой записи;
  • PUT — отправляет данные на сервер с перезаписью существующей записи;
  • DELETE — удаляет данные ресурса.
GETPOSTPUTDELETE
Только получает данные ресурсаМожет получать и отправлять данные ресурсаПерезаписывает существующий ресурсУдаляет указанный ресурс
Передает данные в URLПередает данные в теле запросаПередает данные в теле запросаДанные могут передаваться в теле и в URL запроса
Имеет ограничение на длину 255 символовНет ограничений по длинеНет ограничений по длинеНет ограничений по длине
Можно использовать только символы ASCIIМожно использовать символы любой кодировки и передавать файлыМожно использовать символы любой кодировки и передавать файлыМожно использовать только символы ASCII
Не безопасен (нельзя передавать пароли)Более безопасенБолее безопасенНе безопасен

Request URI — строка запроса, которая содержит последовательность символов к ресурсу, а также (опционально) параметры запроса, которые могут передаваться прямо в строке запроса (например, для GET).

Для передачи параметров в строке запроса необходимо следовать ряду определенных правил:

  • Параметры отделяются от адреса символом «?».
  • Каждый параметр задается парой «Ключ» и «Значение».
  • «Ключ» и «Значение» разделены между собой символом «=».
  • При необходимости задать несколько параметров в одной строке запроса, они отделяются друг от друга символом «&».

Например, в строке запроса http://example.com/path/to/page?name=ferret&color=purple:

  • http://example.com/ — базовый адрес (base URL), с которого будут начинаться все запросы;
  • /path/to/page — путь к ресурсу относительно базового адреса;
  • Параметр name со значением ferret;
  • Параметр color со значением purple.

Стоит отметить, что данные в строке запроса должны передаваться в специальной кодировке — URL Percent Encoding. Таким образом, чтобы передать в строке запроса, например, символы кириллицы, необходимо перевести их в этот формат. В сети существует множество инструментов, позволяющих легко перевести строку запроса в нужный формат.

Protocol version — версия протокола HTTP (практически всегда используется HTTP/1.1).

Headers (заголовки или «хедеры») — часть запроса, в которой хранится необходимая для выполнения запроса информация от клиента.

Заголовки представляют пары «Ключ»:»Значение». Они содержат различную информацию о HTTP-запросе и Вашем браузере. Например, строка «User-Agent» предоставляет информацию о версии браузера и операционной системе, которую Вы используете. «Accept-Encoding» сообщает серверу, может ли Ваш браузер принимать сжатый output, например, gzip.

В свою очередь, ответ сервера так же содержат заголовки. Эти значения могут содержать информацию о софте сервера при последнем изменении страницы/файла и прочее. Опять же, большинство этих headers на самом деле являются необязательными.

Кроме этого, сервер отправляет так же код состояния (statuscode) ответа. Коды состояния делятся на 5 групп:

1ххИнформационные
2ххУспешные
3ххПеренаправление
4ххОшибки клиента
5ххОшибки сервера

Полный список кодов ошибок из каждой группы и их описание можно посмотреть тут.

Body (тело запроса) — опциональное поле, в котором передается вся необходимая информация, которую нужно передать на сервер.

Рассмотрим выполнение запросов на примерах.

Общим предусловием для всех примеров будет наличие сайта https://reqres.in, который позволяет производить различного рода действия над пользователем. В данном случае, https://reqres.in — это базовый адрес (base URL), к которому будут добавляться пути к ресурсам.

GET запрос. Имеет функцию получения списка пользователей. Задача данной функции — отображать список пользователей по три записи на странице.

GET /api/users?page={page_number}

Получим список пользователей для второй страницы:

Как мы видим, в поле ниже мы получили ответ в формате JSON, который содержит 3 записи о пользователях.

POST запрос. Функция используется для входа в приложение и возвращает ответ со значением токена авторизации.

POST /api/login

Параметры тела запроса:

  • email – новое имя пользователя;
  • password – новая профессия пользователя.

Вызов функции и ответ сервера будет выглядеть таким образом:

В данном примере строка запроса не содержит параметров. Body запроса же в свою очередь содержит два параметра — email и password. Ответ функции содержит Body с токеном авторизации пользователя.

PUT запрос. Функция изменения данных пользователя. Возвращает ответ с измененными данными пользователя и датой изменения.

PUT /api/users/{user_id}

Параметры тела запроса:

  • name – новое имя пользователя;
  • job – новая профессия пользователя.

Подставив параметры в URI и тело запроса, получим:

DELETE запрос. Функция удаления данных пользователя. Функция возвращает пустой ответ и код 204 (No Content)

DELETE /api/users/{user_id}

Тело запроса не содержит данных.

Подставив нужный идентификатор пользователя в строку запроса, удалим его данные:

5 1 vote
Article Rating
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments