yandex
Калькулятор ценТарифыАкцииДокументацияО насКарьера в Cloud.ruНовостиЮридические документыКонтактыРешенияРеферальная программаКейсыПартнерство с Cloud.ruБезопасностьEvolutionAdvancedEvolution StackОблако VMwareML SpaceВ чем отличия платформ?БлогОбучение и сертификацияМероприятияИсследования Cloud.ruЛичный кабинетВойтиЗарегистрироватьсяEvolution ComputeEvolution Managed KubernetesEvolution Object StorageEvolution Managed PostgreSQL®Облако для мобильных и веб‑приложенийАналитика данных в облакеEvolution Bare MetalEvolution SSH KeysEvolution ImageСайт в облакеEvolution DNSEvolution VPCEvolution Load BalancerEvolution Magic RouterEvolution DiskХранение данных в облакеEvolution Container AppsEvolution Artifact RegistryEvolution Managed ArenadataDBEvolution Managed TrinoEvolution Managed SparkАналитика данных в облакеEvolution ML InferenceEvolution Distributed TrainEvolution ML FinetuningEvolution NotebooksCurator Anti-DDoSCurator Anti‑DDoS+WAFUserGate: виртуальный NGFWStormWall: Anti-DDoSEvolution TagsEvolution Task HistoryCloud MonitoringCloud LoggingАренда GPUAdvanced Object Storage ServiceAdvanced Elastic Cloud ServerAdvanced Relational Database Service for PostgreSQLРазработка и тестирование в облакеAdvanced Image Management ServiceAdvanced Auto ScalingDirect ConnectCDNCross-platform connectionAdvanced Enterprise RouterAdvanced Cloud Backup and RecoveryAdvanced Data Warehouse ServiceAdvanced Elastic Volume ServiceAdvanced Cloud Container EngineAdvanced FunctionGraphAdvanced Container Guard ServiceAdvanced Software Repository for ContainerAdvanced Document Database Service with MongoDBAdvanced Relational Database Service for MySQLAdvanced Relational Database Service for SQL ServerCloud AdvisorAdvanced Server Migration ServiceAdvanced Data Replication ServiceAdvanced API GatewayAdvanced CodeArtsAdvanced Distributed Message Service for KafkaAdvanced Distributed Message Service for RabbitMQAdvanced DataArts InsightAdvanced CloudTableAdvanced MapReduce ServiceAdvanced Cloud Trace ServiceAdvanced Application Performance ManagementAdvanced Identity and Access ManagementAdvanced Enterprise Project Management ServiceVMware: виртуальный ЦОД с GPUVMware: виртуальный ЦОДУдаленные рабочие столы (VDI)VMware: сервер Bare MetalИнфраструктура для 1С в облакеУдаленные рабочие столыМиграция IT‑инфраструктуры в облако3D-моделирование и рендерингVMware: резервное копирование виртуальных машинVMware: резервный ЦОДVMware: резервное копирование в облакоVMware: миграция виртуальных машин
Поиск
Связаться с нами

Гайд по протоколу HTTP: расшифровка, структура и механизм работы

Каждый раз, когда мы открываем браузер и вводим адрес веб-сайта, протокол HTTP доставляет веб-страницы на наш экран. Задумывались ли вы, как это происходит? В этой статье раскроем тонкости HTTP: расскажем, что скрывается за аббревиатурой, разберем структуру протокола и покажем, как он делает интернет таким, каким мы его знаем.

Обзоры
Иллюстрация для статьи на тему «Гайд по протоколу HTTP: расшифровка, структура и механизм работы»
Продукты из этой статьи:
Иконка-Evolution Object Storage
Evolution Object Storage
Иконка-Evolution Managed Kubernetes
Evolution Managed Kubernetes
Иконка-Evolution Compute
Evolution Compute

Что такое HTTP и как он работает

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

HTTP (HyperText Transfer Protocol) — это протокол передачи гипертекста. Гипертекстом называют систему текстовых страниц с перекрестными ссылками. HTTP берет данные с этих страниц и доставляет на ваш экран в разном формате. Это могут быть изображения, текст или видео.

HTTP использует архитектуру «клиент-сервер». Она так называется, потому что содержит в себе двух участников:

  • Клиент — это браузер или командная строка, с которых пользователь посылает запрос.

  • Сервер — это компьютер или кластер, обрабатывающий запросы клиента.

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

Blog imageВид «общения» клиента с сервером
Дарим до 20 000 бонусов
Дарим до 20 000 бонусов
4 000 бонусов — физическим лицам, 20 000 бонусов — юридическим

Из чего состоят запросы HTTP

Запросы — это информация, которую клиент посылает на сервер, чтобы получить доступ к ресурсу. В них входят:

  1. Стартовая строка, в которой описывают версию протокола, запрашиваемые ресурсы или код ответа.

  2. HTTP-заголовки — строки текста конкретного формата, которые конкретизируют запрос, называют контент тела сообщения.

  3. Тело сообщения с информацией, которая соединяет запрос или документ в передаваемом ответе.

Стартовая строка и ее компоненты

В строке запроса есть методы, URL и версия протокола. Разберем детально их ниже.

Разновидности методов HTTP

Метод — это действие, которое означает, что нужно сделать со страницей после запроса: обратиться к серверу за определенными данными, послать данные на него и так далее.

Например, в строке браузера введем https://cloud.ru/blog. Чтобы эта страница открылась, нужен метод GET. Протокол HTTP использует GET, чтобы передавать сообщения.

Blog imageОстальные методы нужны для отправки REST-запросов. Они посылаются через интернет, чтобы взаимодействовать с данными на веб-сервисе RESTful API

Что такое URL

URL (Uniform Resource Locator) — единый идентификатор ресурса. Это строка, где мы сообщаем необходимый ресурс и часть параметров: IP-адрес, путь к ресурсу на сервере, запрос (query).

Версии HTTP-протокола

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

Зачастую в стартовой строке запроса стоят версии HTTP/1.1 или HTTP/2.

Blog imageБывшие и существующие версии протокола HTTP

Четыре категории заголовков протокола

Заголовки передают информацию между клиентами и серверами. Они содержат метаданные о query или ответе, которые помогают правильно понимать и обрабатывать данные.

Заголовки (Headers) — это строки в HTTP-сообщении с форматом «Имя-Заголовок:Значение». С их помощью клиент и сервер отправляют дополнительные данные с запросом.

Query передают много разных заголовков, но их обычно делят на эти категории:

  1. Основные заголовки (General Headers) — есть в каждом сообщении клиента и сервера.

  2. Заголовки запроса (Request Headers) — есть в запросах клиента.

  3. Заголовки ответа (Response Headers) — используются только для ответов, которые приходят от сервера.

  4. Заголовки сущности (Entity Headers) — следуют за каждой сущностью сообщения.

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

Тело запроса

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

Как выглядят ответы HTTP и что в них скрыто

HTTP-ответ — это сообщение, которое клиент получает от сервера, когда отвечает на запрос. Состоит ответ из того же, из чего состоит запрос: стартовая строка, заголовки, тело ответа.

Стартовая строка или строка статуса

Стартовая строка HTTP-ответа называется строкой статуса или status line. Ее используют для контакта между клиентом и сервером. Строка передает информацию о результате выполнения запроса. Браузер понимает, что произошло с его запросом и что ему делать дальше.

Status line содержит три составляющих:

  1. Версия протокола HTTP/1.1.

  2. Код состояния, показывающий удачную или провальную обработку query.

  3. Код состояния и текст с сокращенным описанием кода. Его применяют, чтобы человек сразу понял, о чем идет речь в ответе.

Blog imageСтрока состояния ответа показывает успешность запрошенного результата

Коды состояния и текст статуса

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

1xx

Коды этой категории просто информируют, что первую часть запроса сервер получил и не отклонил ее.

2xx

Коды состояния из этой категории приходят, если запрос клиента сервер обработал успешно.

3xx

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

4xx

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

5xx

Коды этой категории можно увидеть, если на сервер выдал ошибку.

Подробное объяснение кодов, чтобы понимать их статус в ответе:

  • 200 OK — данные успешно получены.

  • 201 Created — запрос прошел и данные созданы. Статус подтверждает успех POST и PUT.

  • 300 Moved Permanently — перманентное изменение URL-адреса.

  • 400 Bad Request — запрос создан неправильно. Часто это происходит вместе с методами PUT и POST, когда данные не прошли проверку, либо их представили в неправильном формате.

  • 401 Unauthorized — сначала сделайте аутентификацию, а уже после запросите доступ к ресурсу.

  • 404 Not Found — запрашиваемый ресурс не найден.

  • 405 Forbidden — запрашиваемый ресурс не поддерживает упомянутый метод HTTP.

  • 409 Conflict — возник конфликт на стороне браузера при попытках создать данные с помощью PUT.

  • 500 Internal Server Error — появилась ошибка на сервере.

Заголовки ответа

Заголовки ответа (Response Headers) браузер использует, чтобы разобраться с полученными данными и представить их в нужном виде. Они уточняют ответ и не отражаются на содержимом тела.

WWW-Authenticate

Как выглядит: WWW-Authenticate: BASIC realm=»localhost». Он говорит клиенту о типе аутентификации, который нужен, чтобы получить доступ к запрашиваемому ресурсу.

Server

Пример — Server: nginx. В заголовке ответа заложена информация о сервере, обрабатывающего запрос.

Set-Cookie

Как выглядит: PHPSESSID=bf42938f. Внутри заголовка есть cookie, нужные для определения клиента. Браузер парсит их и держит куки в хранилище для будущих запросов.

Тело ответа

Последняя часть ответа — это его тело. В зависимости от типа query и ресурса тело может содержать изображения, видео, JSON-объекты, HTML-документы и другие файлы. Но оно необязательно. Например, у кода «204 No Content» тела нет, потому что большую часть данных для ответа на запрос код передал в заголовке.

Отправляем HTTP-запрос: как это сделать и как понять его ответ

Чтобы отправить HTTP-запрос, нужны два инструмента, которые помогут написать его в браузер, отправить на сервер и получить ответ. Это инструменты разработчика и утилита cURL.

Инструменты разработчика

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

Если в браузере нажать на [f12] или комбинацию клавиш [Ctrl+Shift+I], то откроется окно инструментов разработчика. Выглядит это как панель с несколькими вкладками.

Blog imageОкно инструментов разработчика в браузере

Посмотрите на вкладку Network. Чаще всего во всех браузерах эта вкладка называется одинаково. Откройте ее и на этой странице браузера, впишите в адресной строке URL сайта, куда хотите перейти. Наш пример — блог Cloud.ru https://cloud.ru/blog. Далее нажмите Enter, сайт загрузится, а во вкладке Network появятся новые элементы: список ресурсов, чтобы сайт работал правильно.

Blog imageОкно инструментов разработчика после перехода в блог Cloud.ru

Чтобы увидеть подробности обработки и переданного запроса, нажимаем на blog и справа видим запрос.

Blog imageПодробности обработки query

В запросе отражены:

  • URL — https://cloud.ru/blog.

  • Метод GET подтверждает, что мы получили страницу блога, которую запросили у сервера.

  • Код со статусом 200 OK, который показывает, что сервер успешно получил данные.

  • Remote Address указывает на IP-адрес и порт сервера, с которым браузер установил соединение, чтобы выполнить HTTP-запрос.

  • Referrer Policy определяет, как и когда браузер отправляет заголовок Referrer с HTTP-запросами. Он содержит URL страницы, на которой был инициирован запрос.

Утилита cURL

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

Чтобы отправить запрос и дождаться ответа, нужно задействовать флаг -v, а также прописать URL ресурса, который надо получить.

Что мы получим после запуска утилиты:

  • соединение с сервером;

  • важные вопросы для отправки запроса автоматически решены;

  • запрос с содержимым отправлен с помощью флага -v;

  • принятый ответ от сервера показывается в командной строке как есть.

Безопасность HTTP-запросов: что такое HTTPs

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

Но как тогда безопасно оплачивать покупки на сайте интернет-магазина или переводить деньги в банковских приложениях? За сохранность данных пользователя отвечает расширение HTTPS.

HTTPs (HyperText Transfer Protocol, secure) — это расширение для HTTP-протокола, которое работает через шифрованные механизмы TLS и SSL. HTTPs защищает данные посетителей от несанкционированных атак и атак посредника. Украсть могут реквизиты кредитных карт, пароли или другую чувствительную информацию. Поэтому для любого сайта очень важно иметь данное расширение.

Сертификат SSL обеспечивает безопасность HTTPs. С его помощью данные шифруются сперва в браузере. После шифрования они выглядят как набор произвольных символов и затем в таком виде передаются на сервер. Во время запроса шифр всегда изменяется, из-за этого злоумышленникам сложно найти ключ и похитить данные.

Сегодня почти на всех сайтах установлено защищенное соединение. И многие браузеры используют только расширение HTTPS. Увидеть и проверить это можно просто посмотрев на адресную строку. Обычно она выделена зеленым цветом или в ней есть замок. Пример — сайт https://cloud.ru/.

Blog imageУ сайта есть SSL-сертификат, а значит он безопасен для пользователей и является подлинным

Подведем итоги

Протокол HTTP — неотъемлемая составляющая интернета. Мы разобрали аббревиатуру протокола, его структуру и механизм работы. Изучили, как протокол передает данные между клиентом и сервером, разобрали методы, URL. Показали все версии HTTP-протокола. Выяснили важность заголовков и кода состояния. Рассмотрели, как отправить запрос и прочитать его ответ. А также рассказали, как расширение HTTPs делает интернет безопасным местом для важных данных пользователей.

Продукты из этой статьи:
Иконка-Evolution Object Storage
Evolution Object Storage
Иконка-Evolution Managed Kubernetes
Evolution Managed Kubernetes
Иконка-Evolution Compute
Evolution Compute
25 ноября 2024

Вам может понравиться