HTTP і HTTPS: що змінюється, коли сайт захищений

Кожна адреса в браузері починається з http:// або https://, і різниця в одній літері — це різниця між листівкою й запечатаним конвертом. HTTP — протокол, якою браузер і…

Ілюстрація до статті: HTTP і HTTPS: що змінюється, коли сайт захищений

Оновлено:

Кожна адреса в браузері починається з http:// або https://, і різниця в одній літері — це різниця між листівкою й запечатаним конвертом. HTTP — протокол, якою браузер і сервер обмінюються сторінками; HTTPS — той самий протокол, загорнутий у шифрування TLS. Ця стаття пояснює, як влаштований HTTP-запит, що саме додає HTTPS, чому браузери сьогодні позначають звичайний HTTP як «незахищений», і що робити власнику сайту, щоб його сторінки не мали змішаного вмісту.

Як працює HTTP

HTTP — текстовий протокол «запит — відповідь». Браузер надсилає запит:

GET /articles/ HTTP/1.1
Host: versuss.space
Accept: text/html
User-Agent: Mozilla/5.0 ...
Cookie: session=7f3a9c1e

Сервер відповідає кодом статусу, заголовками й тілом:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=600
Content-Length: 18422

<!doctype html>...

Методи описують намір: GET — отримати, POST — надіслати дані (форма, вхід), PUT/PATCH — змінити, DELETE — видалити. Коди статусу: 2xx — успіх, 3xx — перенаправлення (301 назавжди, 302 тимчасово), 4xx — помилка клієнта (404 не знайдено, 403 заборонено, 401 потрібна автентифікація), 5xx — помилка сервера. Заголовки несуть метадані: тип вмісту, кешування, cookie, стиснення, мову. Протокол не має стану — кожен запит незалежний, тому для «пам’яті» використовують cookie.

Версії: HTTP/1.1 (1997) відкриває окреме з’єднання на кілька запитів; HTTP/2 (2015) мультиплексує багато запитів в одному з’єднанні й стискає заголовки; HTTP/3 (2022) працює поверх QUIC (UDP), швидше встановлює з’єднання й не гальмує все через один втрачений пакет. HTTP/2 і HTTP/3 браузери підтримують лише через HTTPS.

Що додає HTTPS

HTTPS — це HTTP усередині TLS-з’єднання. Перед першим запитом браузер і сервер виконують рукостискання: сервер надсилає сертифікат, браузер перевіряє його (ім’я, термін, ланцюжок довіри), сторони узгоджують сеансовий ключ за алгоритмом обміну ключами (ECDHE), і далі весь трафік шифрується. TLS гарантує три речі:

  • Конфіденційність: провайдер, оператор Wi-Fi, будь-хто на шляху бачить лише домен (через SNI і DNS), але не сторінки, паролі, форми чи cookie.
  • Цілісність: ніхто по дорозі не змінить вміст — не вставить рекламу, скрипт чи інше «оновлення».
  • Автентичність: сертифікат підтверджує, що сервер справді контролює домен в адресному рядку.

Без HTTPS усе це відсутнє: у відкритій Wi-Fi-мережі cookie сеансу читається за секунди, провайдер вставляє свою рекламу, а сторінка входу може бути підмінена. Тому браузери позначають HTTP «Не захищено», Google надає HTTPS перевагу в ранжуванні, а сучасні API (геолокація, камера, service workers, HTTP/2) працюють лише через HTTPS.

Змішаний вміст

Сторінка завантажена по HTTPS, але тягне картинку, скрипт чи стиль по http:// — це змішаний вміст. Скрипти й стилі по HTTP браузер блокує (їх можна підмінити й отримати контроль над сторінкою), картинки — блокує або показує з попередженням, і замок біля адреси зникає. Типова причина — абсолютні адреси http:// у старому вмісті або сайт за проксі, який не повідомляє WordPress чи іншій CMS, що з’єднання захищене, і вона генерує http://-посилання. Виправлення: відносні адреси або https:// усюди, коректні налаштування «за проксі» в CMS, заголовок Content-Security-Policy: upgrade-insecure-requests, який змушує браузер підняти всі підресурси до HTTPS.

Як перевірити, що з’єднання справді захищене

  • Власникам сайтів: HTTPS для всього, з безкоштовним сертифікатом і автооновленням; перенаправлення 301 з HTTP на HTTPS; HSTS, щоб браузери не повертались до HTTP.
  • Перевіряйте сайт на змішаний вміст після міграції й після додавання зовнішніх ресурсів.
  • Увімкніть HTTP/2 або HTTP/3 на сервері чи CDN — це безкоштовне прискорення.
  • Користувачам: не вводьте паролі й дані карток на сторінках без замка; увімкніть режим «лише HTTPS» у браузері.
  • Пам’ятайте: замок означає захищене з’єднання з цим доменом, а не чесність його власника — фішингові сайти теж мають HTTPS.

Часті запитання

Чи HTTPS повільніший?

Рукостискання додає один-два обміни при першому з’єднанні, але HTTP/2 і HTTP/3, доступні лише через HTTPS, дають виграш, який це перекриває. На практиці HTTPS-сайт швидший.

Чи бачить провайдер, які сторінки я відкриваю через HTTPS?

Він бачить домен (через DNS і SNI), обсяг і час трафіку, але не адреси сторінок, не вміст, не паролі. Зашифрований DNS і Encrypted Client Hello ховають і домен.

Що означає помилка 502 чи 503?

Сервер (або проксі перед ним) не зміг отримати відповідь від застосунку: він перевантажений, перезапускається або впав. Це проблема сайту, не вашого з’єднання.

HTTP — це розмова, яку чує весь коридор; HTTPS — та сама розмова за зачиненими дверима з перевіреним співрозмовником.

Коротко: HTTP — текстовий протокол запитів і відповідей із методами, кодами статусу й заголовками, без стану. HTTPS загортає його в TLS і дає конфіденційність, цілісність та підтвердження домену через сертифікат; без нього трафік читається й підміняється, а сучасні функції браузера недоступні. Сайтам потрібен HTTPS усюди без змішаного вмісту, а користувачам — звичка перевіряти замок і домен перед введенням даних.