Что такое HTTP и HTTPS

Текущее изображение: HTTP

Что такое HTTP

HTTP расшифровывается как HyperText Transfer Protocol — протокол передачи гипертекста.

Это набор правил, по которым браузер запрашивает документы у сервера, а сервер их отдаёт.

Простая аналогия. Вы приходите в библиотеку и говорите библиотекарю: «Дайте книгу под номером 7423». Библиотекарь находит и приносит. Или отвечает: «Такой книги нет». Вот и весь HTTP — запрос и ответ.

Только вместо книги — HTML-страница, картинка, видео или любой другой файл. Вместо вас — браузер. Вместо библиотекаря — веб-сервер.

HTTP работает поверх TCP/IP.

TCP обеспечивает надёжную доставку данных, IP — адресацию.

HTTP не беспокоится о том, как именно байты добираются из точки А в точку Б. Это задача нижних протоколов.

Как выглядит HTTP-запрос

Когда вы набираете в браузере адрес и нажимаете Enter, браузер отправляет серверу сообщение. Это HTTP-запрос.

Его структура простая. Первая строка содержит три части: метод, путь и версию протокола.

Метод — это то, что браузер просит сделать.

GET — самый распространённый. «Дайте мне этот документ.» Каждый раз, когда вы открываете страницу — это GET-запрос.

POST — отправить данные на сервер. Заполнили форму, нажали «Отправить» — браузер посылает POST с содержимым формы.

PUT и DELETE — загрузить или удалить данные. Используются в API, реже в обычном браузере.

HEAD — то же, что GET, но без тела документа. Только заголовки. Так поисковые роботы проверяют, изменилась ли страница, не скачивая её целиком.

Дальше в запросе идут заголовки — дополнительная информация. Какой браузер обращается, какие типы файлов он принимает, на каком языке хочет ответ.

Что отвечает сервер

Сервер получает запрос, находит нужный файл и отвечает. Первая строка ответа — код состояния. Это самая известная часть HTTP.

200 OK — всё хорошо, документ найден, вот он.

301 Moved Permanently — страница переехала навсегда. Браузер автоматически перейдёт по новому адресу. Используется при редиректах.

304 Not Modified — страница не менялась с прошлого раза. Браузер возьмёт версию из своего кэша — незачем скачивать заново.

404 Not Found — страница не найдена. Сервер работает, но такого документа у него нет.

500 Internal Server Error — ошибка на стороне сайта, не вашей.

503 Service Unavailable — сервер временно недоступен. Перегружен или на техническом обслуживании.

Первая цифра кода говорит о классе: 2xx — успех, 3xx — перенаправление, 4xx — ошибка клиента, 5xx — ошибка сервера.

После заголовков идёт тело ответа — сам HTML-документ, картинка, файл. То, что браузер показывает на экране.

Что такое HTTPS

HTTPS — это HTTP Secure. Тот же протокол, но с шифрованием.

Разница одна, и она принципиальная.

Обычный HTTP передаёт данные открытым текстом. Кто угодно, кто находится между вами и сервером — провайдер, роутер в кафе, оператор Wi-Fi в аэропорту — может прочитать содержимое. Пароль от почты, номер карты, личная переписка — всё в открытом виде.

HTTPS оборачивает HTTP-соединение в слой шифрования. Передаётся тот же запрос, тот же ответ — но зашифрованные. Читать их без ключа невозможно.

Шифрование обеспечивает протокол TLS — Transport Layer Security. Раньше он назывался SSL, и это название до сих пор встречается в документации. SSL официально устарел в 2015 году, но слово прижилось — люди до сих пор говорят «SSL-сертификат», имея в виду TLS.

Как браузер договаривается о шифровании

Перед тем как обменяться данными, браузер и сервер проводят переговоры. Это называется TLS-рукопожатие — handshake.

Браузер говорит: «Я умею работать с такими-то алгоритмами шифрования. Выбирай.»

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

Браузер проверяет сертификат. Если он выдан доверенным центром сертификации — переговоры продолжаются. Стороны вычисляют общий ключ шифрования. Соединение установлено.

Всё это занимает миллисекунды. Пользователь ничего не замечает.

Что такое сертификат и замочек в браузере

Сертификат — цифровой документ. В нём написано: "Сервер по адресу pwnrie.beget.tech/ является именно тем сайтом, которым вы хотели его видеть. Это подтверждает такой-то центр сертификации."

Центры сертификации (CA) — это организации, которым браузеры доверяют по умолчанию. Список зашит в операционную систему и браузер. Самые известные: Let’s Encrypt, DigiCert, Comodo.

Когда браузер видит действующий сертификат от доверенного CA — в адресной строке появляется замочек.

Это значит три вещи одновременно. Соединение зашифровано — посторонние не могут прочитать трафик. Сервер прошёл проверку — вы разговариваете именно с тем сайтом, адрес которого набрали. Данные не изменились в пути — никто не подменил страницу на маршруте.

Красный замочек или предупреждение «Небезопасно» означает одно из трёх: сертификат просрочен, самоподписан или домен не совпадает с тем, на котором вы находитесь. Вводить пароли и платёжные данные на таком сайте не стоит.

С 2018 года Google Chrome помечает все HTTP-сайты как небезопасные. Это ускорило переход веба на HTTPS: сегодня больше 95% сайтов используют зашифрованный протокол.

Сегодня HTTPS — стандарт для всех сайтов без исключений. Let’s Encrypt выдаёт сертификаты бесплатно и продлевает их автоматически. Причин использовать HTTP почти не осталось.

HTTP/2 и HTTP/3

Оригинальный HTTP/1.1 из 1997 года имел один существенный недостаток. Для каждого файла браузер открывал отдельный запрос. Загружаете страницу с сотней картинок — сотня последовательных обращений к серверу.

HTTP/2 появился в 2015 году и решил это мультиплексированием. Несколько запросов идут по одному соединению одновременно. Страницы стали загружаться заметно быстрее.

HTTP/3 (2022) пошёл дальше. Он заменил TCP на протокол QUIC, построенный поверх UDP. Это ускоряет соединение в условиях потерь пакетов — в первую очередь на мобильных сетях, где сигнал нестабилен.

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

Как HTTP связан с другими протоколами

HTTP работает не в одиночку. Он верхний этаж многоуровневой архитектуры.

Когда вы открываете страницу — DNS переводит доменное имя в IP-адрес.

TCP/IP устанавливает соединение и доставляет пакеты. TLS шифрует данные, если используется HTTPS. И только потом HTTP передаёт сам запрос и ответ.

Каждый уровень не знает деталей другого. HTTP не знает, как TCP разбивает данные на пакеты. TCP не знает, что внутри пакетов. Это принцип инкапсуляции. Именно он позволяет интернету работать с таким разнообразием устройств, сетей и приложений.

Тим Бернерс-Ли строил HTTP поверх уже существующей инфраструктуры, придуманной Серфом и Каном. Не с нуля — а как следующий этаж на готовом фундаменте.