HTTP (от англ. HyperText Transfer Protocol) — протокол передачи гипертекста. Это набор правил, по которым данные в интернете передаются между разными источниками, обычно между компьютерами и серверами. Интернет-протокол HTTP — это шаблон, по которому формируется запрос на передачу данных, а затем передаются интернет-страницы, видео, аудио и текст. Чаще всего с помощью HTTP передают веб-страницы, то есть контент сайтов, которые отображаются в интернете.
Протокол HTTP нужен для стандартизации. Благодаря ему все компьютеры в интернете могут расшифровать присланные данные и отправлять их в виде, понятном другим компьютерам.
Структура HTTP-сообщения всегда одинакова:
1. Стартовая строка, в которой определяется адрес, по которому отправляется запрос, и тип сообщения. Указывается метод, который определяет действия при получении этого сообщения. Это может быть чтение данных, их отправка, изменение или удаление.
2. Заголовки (Headers), в которых прописаны определённые параметры сообщения. Например, может быть напрямую задан язык.
3. Тело запроса (Request Body), текст сообщения — данные, которые передаются. Например, файлы, отправляемые на сервер.
Кроме HTTP для передачи гипертекстовых данных, существуют и другие протоколы. Например, FTP для передачи файлов или SSH для удалённого управления компьютером и передачи паролей.
У HTTP есть расширение — протокол HTTPS. Буква S в аббревиатуре означает Secure, то есть «защищённый». Он организует передачу данных более безопасно, так как сообщение перед отправкой шифруется по специальным правилам. Сейчас практически все сайты работают именно на HTTPS, однако в его основе лежат всё те же базовые правила HTTP.
Сейчас большинство недостатков HTTP исправлены надстройками и не заметны на практике. Поэтому протокол передачи гипертекста остаётся актуальным, и прекращать применять HTTP никто не планирует.
HTTP позволяет не только получать и передавать данные, но и управлять поведением сайта. Например, с помощью заголовков и тела сообщения можно управлять:
● Кэшем. Сервер расскажет, что и как долго кэшировать на стороне клиента. Так браузер клиента поймёт, какие элементы сайта нужно положить в кэш для будущего переиспользования.
● Аутентификацией. В заголовке HTTP можно настраивать специальные сессии и куки для быстрого входа по логину и паролю. Именно благодаря этому можно заходить на сайты, не вводя повторно логин и пароль.
● Сессиями. Текст HTTP-запроса позволяет серверу запомнить состояние сайта на стороне клиента. Например, чтобы сохранить его корзину или какие-то введённые данные даже при обновлении страницы.
Система, которая работает на HTTP, требует минимум два участника. Один из них — клиент, который отправляет запросы. Как правило, это компьютер пользователя с браузером. Второй — сервер, который отвечает на запросы, отправляя клиенту нужную информацию. Обычно это компьютер, на котором запущен сайт: части его системы и база данных.
Иногда в этой схеме появляются дополнительные элементы — прокси-серверы. Они располагаются между клиентом и сервером и обрабатывают запросы — например, дополнительно их шифруют или кэшируют. Часто прокси используют, чтобы сделать запрос анонимным: сервер отвечает не напрямую клиенту, а через указанный прокси или цепочку таких серверов.
Сама работа HTTP-протокола максимально проста — клиент передаёт запрос, сервер формирует ответ и передаёт его обратно. До отправки запроса и после получения ответа происходят фоновые задачи, незаметные для пользователя. Поэтому, чтобы понять, как работает протокол HTTP, рассмотрим этот процесс целиком:
1. Формирование URL или переход по введённой ссылке в браузере клиента. Это то, что видно в адресной строке: например, https://practicum.yandex.ru/. Здесь как раз используется протокол HTTPS. Браузер анализирует URL и понимает, что по этому адресу нужно отправить HTTP-запрос.
Этот пункт актуален, если клиент переходит по ссылке браузера. Но это не обязательно: иногда HTTP-запрос формируется после каких-то действий пользователя автоматически. Либо всё происходит вообще не в браузере — например, в случае с умными устройствами. Тогда первый пункт просто пропускается, а запрос инициируется после некоторого триггера.
2. Клиент формирует и отправляет запрос. Для этого генерируется стартовая строка, заголовки и тело запроса в зависимости от того, что именно будет запрошено у сервера. Это может быть как просто отображение страницы, так и какие-то действия, например обновление или удаление данных с сервера.
3. Запрос направляется напрямую на сервер либо через прокси. Движение запроса регулируется другими протоколами, которые управляют отправкой данных по сети. Обычно это TCP/IP. Они формируют пакеты данных из запросов по своим правилам.
4. Сервер получает запрос, обрабатывает и формирует ответ. Он также заполняет стартовую строку и заголовок, а в тело поместит то, что клиент запросил. Обычно это веб-страница в формате HTML, которую браузер сможет расшифровать и отобразить. Одной из зон ответственности веб-разработчика является формирование и генерация этого HTML-кода — при помощи различных подходов и средств, в частности библиотек, движков-генераторов и фреймворков.
5. Клиент получает ответ и отображает результат. Обычно для этого он расшифровывает полученные данные в HTML и отображает их в браузере в виде веб-страницы.
Николай Федосеев
Практически ни одно приложение или устройство не обходится без использования интернета или сетевых технологий. Если разобраться в «магии» перемещения пакетов данных между двумя устройствами, то можно легко понять работу всего мирового интернета. Построение и работа сетей, а также особенности использования протоколов в них — фундаментальные знания, которые нужны каждому программисту. Разобраться в основах помогут книги «Компьютерные сети. Принципы, технологии» Олифера и «Компьютерные сети» Таненбаума.
Читать также: