Кейс
June 25, 2021

Протокол HTTP: описание для неспециалистов

Сделал тестовое задание для Яндекс Справки. Тестовое Яндекс принял, но работу я не получил.

Задача

По открытым источникам описать протокол HTTP для неспециалистов. Объяснить что такое запросы и ответы.

Результат

Ссылка на Гугль Док — полный текст документа ниже.

Протокол HTTP

HTTP — это протокол передачи данных между приложениями. Его широко используют в интернете, например, для загрузки страниц с веб-сайтов. HTTP расшифровывается как HyperText Transfer Protocol — Протокол передачи гипертекста. Что такое гипертекст подскажет Яндекс.

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

HTTP определяет две стороны обмена данными: клиент и сервер. И клиент и сервер — это программы. Они могут работать на любом вычислительном устройстве: большом компьютере в дата-центре, ноутбуке или мобильном телефоне. Обычно программа-клиент — это веб-браузер, а программа-сервер — это веб-сервер.

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

В запросе клиент указывает адрес ресурса, такой же, как мы набираем в адресной строке браузера, и операцию, которую нужно с этим ресурсом выполнить. Самые частые операции:

  • получить данные с сервера: страницу, картинку, видео или файл;
  • передать данные на сервер. Это могут быть заполненная веб-форма, текст поста в Яндекс.Дзене или комментарий во ВКонтакте.

Сервер обрабатывает запрос и отправляет ответ. Ответ содержит статус выполнения запроса: удачно или с ошибкой, и запрошенные данные, если не было ошибок.

Представим, что мы хотим открыть в браузере страницу Яндекс.Видео. Набираем в адресной строке «yandex.ru/video». Браузер отправляет на сервер Яндекса по адресу «yandex.ru» запрос: «Покажи страницу /video». Настоящий запрос выглядит по-другому — он формируется по определённому формату, который описан в спецификации протокола HTTP. Сервер находит страницу и отправляет в браузер ответ со статусом «Ok» и запрошенной страницей.Если бы страницы не существовало, скажем пользователь ошибся в адресе, то в ответе был бы код ошибки «404 — Запрошенная страница не найдена».

Браузер получает страницу, анализирует её и запрашивает включённые в страницу объекты: картинки, видео и пр. Для получения каждого объекта браузер отправляет отдельный запрос. После получения всех данных браузер собирает страницу и показывает её пользователю.

Одна из особенностей HTTP в отсутствии «памяти» — каждый следующий запрос даже к одной и той же странице ничего «не знает» о предыдущих. Эта особенность не позволяет реализовать электронную корзину интернет-магазина, так как при каждом обращении к странице корзины мы потеряем информацию о товарах, которые в неё положили.

Чтобы сохранить контекст используют файлы куки. В случае электронной корзины файл куки хранит список товаров. Браузер отправляет куки в запросе и в ответ получает страницу электронной корзины с положенными в неё товарами. Куки используются для авторизации на сайте, хранения истории посещений, хранения настроек сайта и много другого.

Один из серьёзных недостатков HTTP — это его «открытость». Запросы и ответы передаются в текстовом виде, поэтому их легко перехватить. Мошенник может подменить запросы и ответы так, чтобы получить логин и пароль к сайту, данные банковской карты или другую конфиденциальную информацию.

Для решения проблемы безопасности ввели расширение HTTPS — безопасный протокол HTTP. В HTTPS сообщения шифруются специальными алгоритмами, так что содержимое известно только клиенту и серверу. В остальном HTTPS ничем не отличается от HTTP.У HTTP есть разные версии. Наиболее распространённая версия 1.1. Сообщения в HTTP/1.1 передаются как текст — это удобно для тестирования и отладки веб-приложений. Простота HTTP стала одной из причин его широкого распространения.

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