· 4 мин. на чтение.

Что такое HTTP и HTTPS

Что такое HTTP и HTTPS

Что такое HTTP

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

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

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

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

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

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

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

HTTP

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

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

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

http-header

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

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

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

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

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

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

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

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

http-responce

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.

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

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

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

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

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

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

Центры сертификации (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. Это ускоряет соединение в условиях потерь пакетов - в первую очередь на мобильных сетях, где сигнал нестабилен.

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

https3

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

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

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

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

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

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

FAQ

HTTP передаёт данные открытым текстом - их может перехватить провайдер или кто-то в той же Wi-Fi сети. HTTPS шифрует всё соединение с помощью протокола TLS. На HTTPS-сайтах в адресной строке виден замочек.

Три вещи: соединение зашифровано, сервер прошёл проверку подлинности через сертификат, данные не изменились в пути. Замочек не гарантирует, что сайт честный - только то, что ваш трафик до него зашифрован.

Крайне нежелательно. HTTP-соединение не шифруется, и пароль может быть перехвачен на любом промежуточном узле между вашим устройством и сервером. Это особенно опасно в публичных Wi-Fi сетях.

Код 404 означает, что сервер работает нормально, но запрошенной страницы на нём нет. Либо страница была удалена, либо вы набрали неверный адрес.

Не совсем. SSL - более старый протокол, который официально устарел в 2015 году. TLS - его современная замена. Сегодня используется TLS, но термин "SSL-сертификат" прижился и применяется в документации и обиходе как синоним.

Сертификат TLS привязан к конкретному серверу и домену. При переезде на новый хостинг сертификат нужно выпустить заново. Большинство современных хостингов делают это автоматически через Let's Encrypt, но если настройка не выполнена - сайт будет работать по HTTP.

Порт - это номер канала внутри одного IP-адреса. Порт 80 зарезервирован для HTTP, порт 443 - для HTTPS. Когда браузер видит в адресе https://, он автоматически обращается к серверу именно на порт 443.