Как работает протокол HTTP — журнал «Доктайп»

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

Принцип работы

Аббревиатура HTTP расшифровывается как HyperText Transfer Protocol — протокол передачи гипертекста. Узнаем принципы работы на версии протокола — HTTP 1.1, её спецификация — RFC 2616.

В своей работе протокол использует клиент-серверную структуру передачи данных.

Как это работает?

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

HTTP обеспечивает работу интернета. С его помощью решается важная задача — обмен данными между веб-браузером и веб-сервером. Помимо этого, протокол используют в качестве «транспорта» для передачи информации другим протоколам, например, таким как SOAP, XML-RPC и WebDAV.

👉 Основные составляющие HTTP:

  • тело запроса и тело ответа;
  • заголовки запроса и ответа;
  • метод запроса;
  • URL и параметра запроса;
  • код ответа.

Структура запроса

HTTP-запрос состоит из метода, адреса (URI) и версии протокола. Например, запрос может быть таким:

GET /index.html HTTP/1.1

Метод передаёт информацию серверу о том, что пользователь хочет получить или сделать. Например, запрос, начинающийся с GET, означает, что клиент хочет получить информацию (get, англ. — получать).

Браузер отправляет HTTP-запрос

Самые распространённые HTTP-методы

👉 GET — получение информации с сервера.

В качестве информации выступает всё, что есть на сервере, например, видео, изображения, шрифты, CSS-файл, HTML-разметка или JSON-данные и многое другое.

POST — создание новой записи на сервере.

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

PUT — перезапись существующей информации на сервере.

Например, вы написали пост, а потом решили его полностью изменить. Для этого нужно подготовить актуальный текст и сделать запрос PUT с новым постом, который полностью заменит предыдущий.

DELETE — удаление существующей информации на сервере.

HTTP-запросы и ответы состоят из заголовков и тела сообщения.

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

Пример общего заголовка для большинства запросов:

Content-Type: text/html; charset=UTF-8
Content-Length: 208

Первый заголовок, Content-Type, говорит браузеру, какой тип документа он отправляет обратно. Самый распространённый тип — text/html, потому что все веб-страницы являются текстовыми файлами HTML. Также часто встречаются такие типы, как image/png — изображения, video/mpeg — видео, script/javascript — скрипт и другие.

Заголовок Content-length информирует о длине документа в байтах, что помогает браузеру рассчитать время загрузки файла.

HTTP-ответ содержит фактический запрошенный документ. Например, страница представляет собой простой HTML-файл:

<!DOCTYPE html>
<html lang="ru">
  <head>
    <title>Курсы HTML Academy</title>
  </head>
  <body>
    <h2>HTML Academy</h2>
    <p>интерактивные онлайн-курсы</p>
  </body>
</html>

Ответ HTTP также содержит статусный код, который показывает успешность выполнения запроса. Например, 200 OK означает успешное выполнение запроса, в то время как 404 Not Found означает, что запрошенный ресурс не найден.

Адрес URL

Чтобы посетить интернет-ресурсы, пользователь использует приложение браузера. Клиент вводит в браузере URL — Uniform Resource Locator или «Унифицированный Указатель Ресурса». Все URL, которые начинаются с http, дают сигнал браузеру, что необходимо использовать HTTP.

URL в адресной строке

Код ответа

Код ответа или код состояния HTTP — это цифровой код, который возвращается HTTP-сервером и обозначает выполнение или невыполнение запроса клиента.

Спецификация HTTP 1.1 определяет 40 различных кодов. Каждый код состояния отмечен числовым идентификатором в диапазоне от 100 до 599.

Основные коды ответа:

  • 2xx — запрос успешно выполнен, например, 200 OK.
  • 3xx — перенаправление, то есть для выполнения запроса необходимы дополнительные действия, например, 301 Moved Permanently.
  • 4xx — ошибка, связанная с запросом клиента, например,
    404 Not Found.
  • 5xx — ошибка, связанная с сервером, например, 500 Internal Server Error.

Код ответа — это важный способ передачи сообщений между клиентом и сервером в рамках протокола HTTP. Полный список кодов можно найти здесь: «Все HTTP-статусы».

Что важно для разработчика

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

‍Фронтендеры работают с данными, которые передаются разными протоколами. Важно понимать, как всё устроено, чтобы уметь решать типовые задачи.

✅ Обязательно знать:

  1. Основные методы HTTP: GET, POST, PUT, DELETE.
  2. Формат запросов и ответов.
  3. Статусы HTTP-кодов — 200 OK, 404 Not Found, 500 Internal Server Error и другие.
  4. Особенности работы с безопасными соединениями HTTPS.

HTTP используется в различных технологиях и языках программирования. Его применяют в веб-разработке для отправки запросов к серверу и получения данных. Также протокол участвует в работе с REST API — для отправки запросов на получение или изменения данных с сервера.

Как ещё разработчик применяет HTTP:

  1. Использование HTTP-библиотек: многие языки программирования, например, Java, JavaScript и другие, имеют библиотеки, которые позволяют легко отправлять HTTP-запросы и обрабатывать ответы.
  2. Использование API: многие сайты и службы предоставляют API, которые позволяют получать данные из их систем через HTTP-запросы.

Прокачать свои знания о протоколах можно на курсе «Протоколы и сети: основы».


«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

ТелеграмПодкастБесплатные учебники

HTTP 1.0 | Протокол HTTP

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

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

Для того, чтобы посмотреть, как работает HTTP, мы сделаем запрос к серверу google и разберем, как он выглядит. Для этого используется специальная утилита, которая называется

telnet (пример HTTP-запроса, выполненного с помощью утилиты telnet).

# Передаем адрес сайта и указываем tcp порт
# После этого происходит подключение к серверу по протоколу tcp
telnet google.com 80

HTTP – протокол прикладного уровня. Другими словами, он предназначен для общения между двумя программами (клиентом и сервером), находящимися на разных компьютерах. Но, сам по себе, HTTP не может соединять два удаленных компьютера. Для этого используются другие протоколы, среди которых TCP. Именно TCP позволяет соединить программы на удаленных компьютерах, создав канал для общения друг с другом. Для этого нужно знать два параметра: ip-адрес компьютера, к которому нужно подключиться, и порт, на котором «висит» нужная программа.

Команда telnet выше делает именно это, она выполняет соединение по TCP и только после этого входит в режим взаимодействия по HTTP. При условии, что указан правильный ip-адрес и порт для соединения. И на этом моменте возникает два вопроса:

Мы передали адрес сайта, откуда берется ip-адрес? Любой адрес сайта это просто имя, за которым скрывается ip-адрес. ]’.

После подключения веб-сервер входит в режим ожидания HTTP-запроса. Осталось его послать.

Что из себя представляет сам запрос?

Запрос состоит из нескольких частей. Первая часть — стартовая строка (request line). Вторая — заголовки.

В стартовой строке мы указываем специальное слово, еще говорят «глагол». В HTTP описаны разные глаголы, но мы сейчас не будем вдаваться в подробности. Просто скажем, что они определяют, как реагировать на этот запрос. И в данном случае мы будем использовать глагол HEAD. Он очень простой, и просит сервер отдать только заголовки, без содержимого. Более распространенным является GET. Именно с помощью GET мы запрашиваем содержимое сайта.

После глагола указывается путь к ресурсу request URI. Если мы указываем /

, это обозначает просто корень сайта. Дальше все, что нужно сделать, это указать название протокола и его версию. В этом курсе рассматриваются только версии HTTP 1. 0 и 1.1, это основа протокола и знакомство с ним стоит начинать именно c них. Между версиями есть принципиальные отличия, которые нужно хорошо знать и понимать. Версия 1.0 продолжает использоваться в различных целях утилитами командной строки.

В принципе этого достаточно, и для 1.0 больше ничего делать не нужно:

HEAD / HTTP/1.0

Дальше идут заголовки. Что это? Заголовки позволяют передавать дополнительную информацию, например браузеры предоставляют информацию о себе, чтобы было понятно откуда идет запрос. Кроме этого они указывают какие форматы сжатия поддерживают, в каком формате готовы принимать ответ и так далее. Количество стандартных заголовков достаточно большое, помимо них можно добавлять любые свои.

Давайте рассмотрим, как выглядят заголовки. Мы указываем имя и через двоеточие какое-то значение: REFERER: value. Заголовки часто указывают заглавными буквами, но регистр здесь не важен. Порядок заголовков также не специфицирован. В каком бы порядке мы ни передали заголовки, тело ответа будет разбираться только все вместе.

Браузерами используется много заголовков, например, user-agent. Этот заголовок используется для аналитики, а также, когда необходимо адаптировать страницы сайта под разные экраны или браузеры. Но и без него все должно работать:

HEAD / HTTP/1.0
User-Agent: google сhrome

Важно помнить, поскольку это протокол, и у него есть определенные правила, то нарушать их нельзя. HTTP — текстовый протокол. Все правила основаны на простых соглашениях. Например, несколько заголовков отделяются друг от друга переводом строки (и никак иначе!). Мы не можем записать их в одну строку, через запятую или как-то еще. Все очень строго. А каким образом сервер поймет, что вы закончили передавать данные? Это должен быть какой-то маркер, определитель. В HTTP это делается с помощью двух переводов строки. После этого сервер считает что все данные были отправлены и больше данных не будет. То есть фактически два перевода строки (перевод после последнего заголовка и пустая строка) приводят к отправке данных.

]’. HEAD / HTTP/1.0 HTTP/1.0 200 OK Date: Sat, 18 Jan 2020 09:24:50 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 P3P: CP=»This is not a P3P policy! See g.co/p3phelp for more info.» Server: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Set-Cookie: 1P_JAR=2020-01-18-09; expires=Mon, 17-Feb-2020 09:24:50 GMT; path=/; domain=.google.com; Secure Set-Cookie: NID=196=wsHLMAMfnAaSyF7zduokI8TJeE5UoIKPHYC58HYH93VMnev9Nc2bAjhRdzoc4UhmuOd7ZVCorDnzGDe51yPefsRMeVyOFnYdHYYgQNqI8A1dYuk4pDK4OJurQgL4lX8kiNGSNi_kkUESFQ-MqLCB_YspxA9JRejhZdkTRtGyHNk; expires=Sun, 19-Jul-2020 09:24:50 GMT; path=/; domain=.google.com; HttpOnly Accept-Ranges: none Vary: Accept-Encoding Connection closed by foreign host.

В ответ к нам приходит response. Он состоит из status line HTTP/1.0 200 OK. Это строка ответа, в которой указан протокол (здесь он совпадает) и статус ответа 200 OK. В HTTP определено множество различных статусов (400, 500 и т. д.). Они могут информировать, что информация была не найдена, были ошибки на сервере и т.д. Все статусы имеют мнемоническое название, которое передается так же последним значением. 200 и OK обозначает, что все прошло хорошо — success!

Далее выводится большое количество различных заголовков. В них нет ничего сложного, и их не нужно все учить (есть какие-то общие, и они достаточно понятны). Все заголовки состоят из ключа, двоеточия и значения. Можно заметить, что есть вещи, связанные с кодировкой, кешированием. Некоторые заголовки специфичны для текущего сервера. Например, X-XSS-Protection: 0, где X указывает на кастомный заголовок. Но никакой веб-сервер, никакой веб-браузер не будут ломаться при посылке таких дополнительных заголовков.

Именно в HTTP 1.0 в конце после получения данных происходит закрытие соединения.

Основы HTTP — HTTP

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

Обзор HTTP

Описывает, что такое HTTP и его роль в веб-архитектуре, включая его положение в стеке протоколов.

Эволюция HTTP

HTTP был создан в начале 1990-х и несколько раз расширялся. Эта статья рассказывает о его истории и описывает HTTP/0.9, HTTP/1.0, HTTP/1.1 и современный HTTP/2, а также новинки, появившиеся за эти годы.

Ресурсы и URI

Краткое введение в концепцию ресурсов, идентификаторов и местоположений в Интернете.

Идентификация ресурсов в Интернете

Описывает, как ссылаются на веб-ресурсы и как их найти.

URL-адреса данных

Определенный тип URI, непосредственно встраивающий ресурс, который он представляет. URL-адреса данных очень удобны, но имеют некоторые оговорки.

URL-адреса ресурсов Нестандартный
URL-адреса ресурсов

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

MIME-типы

Начиная с HTTP/1.0, можно передавать различные типы содержимого. В этой статье объясняется, как это достигается с помощью заголовка Content-Type и стандарта MIME.

Выбор между URL-адресами с www и без www

В этой статье приведены рекомендации по выбору использования домена с префиксом www или нет, а также последствия такого выбора.

Поток сеанса HTTP

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

HTTP-сообщений

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

Структура кадра и сообщения в HTTP/2

HTTP/2 инкапсулирует и представляет сообщения HTTP/1.x в двоичном фрейме. В этой статье объясняется структура кадра, его назначение и способ кодирования.

Управление соединением в HTTP/1.x

HTTP/1.1 была первой версией HTTP, поддерживающей постоянное соединение и конвейерную обработку. В этой статье объясняются обе концепции.

Управление соединением в HTTP/2

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

Согласование контента

HTTP вводит набор заголовков, начиная с Accept , как способ для браузера объявить предпочтительный формат, язык или кодировку. В этой статье объясняется, как происходит это объявление, как ожидается реакция сервера и как он выбирает наиболее адекватный ответ.

Обнаружили проблему с содержанием этой страницы?

  • Отредактируйте страницу на GitHub.
  • Сообщить о проблеме с содержимым.
  • Посмотреть исходный код на GitHub.

Хотите принять больше участия?

Узнайте, как внести свой вклад.

Последний раз эта страница была изменена участниками MDN.

HTTP | Определение, значение, версии и факты

  • Развлечения и поп-культура
  • География и путешествия
  • Здоровье и медицина
  • Образ жизни и социальные вопросы
  • Литература
  • Философия и религия
  • Политика, право и правительство
  • Наука
  • Спорт и отдых
  • Технология
  • Изобразительное искусство
  • Всемирная история
  • В этот день в истории
  • Викторины
  • Подкасты
  • Словарь
  • Биографии
  • Резюме
  • Популярные вопросы
  • Инфографика
  • Демистификация
  • Списки
  • #WTFact
  • Товарищи
  • Галереи изображений
  • Прожектор
  • Форум
  • Один хороший факт
  • Развлечения и поп-культура
  • География и путешествия
  • Здоровье и медицина
  • Образ жизни и социальные вопросы
  • Литература
  • Философия и религия
  • Политика, право и правительство
  • Наука
  • Спорт и отдых
  • Технология
  • Изобразительное искусство
  • Всемирная история
  • Britannica объясняет
    В этих видеороликах Britannica объясняет различные темы и отвечает на часто задаваемые вопросы.
  • Britannica Classics
    Посмотрите эти ретро-видео из архивов Encyclopedia Britannica.
  • Demystified Videos
    В Demystified у Britannica есть все ответы на ваши животрепещущие вопросы.
  • #WTFact Видео
    В #WTFact Britannica делится некоторыми из самых странных фактов, которые мы можем найти.
  • На этот раз в истории
    В этих видеороликах узнайте, что произошло в этом месяце (или любом другом месяце!) в истории.
  • Студенческий портал
    Britannica — это главный ресурс для учащихся по ключевым школьным предметам, таким как история, государственное управление, литература и т. д.
  • Портал COVID-19
    Хотя этот глобальный кризис в области здравоохранения продолжает развиваться, может быть полезно обратиться к прошлым пандемиям, чтобы лучше понять, как реагировать сегодня.
  • 100 женщин
    Britannica празднует столетие принятия Девятнадцатой поправки, выделяя суфражисток и политиков, творящих историю.