У нас уже есть IP-адрес linkedin.com.Теперь браузер запрашивает саму страницу по протоколу **HTTP**. ### Как выглядит запрос Браузер отправляет: ``` GET / HTTP/1.1 Host: linkedin.com User-Agent: браузер Accept: */* ``` * **GET** — глагол (что хотим: получить, отправить и т.д.) * **/** — путь * Дальше заголовки: кто мы, что умеем Сервер отвечает: * Статус-код: 200 = ок, 301 = перенаправление, 404 = не найдено, 500 = ошибка сервера Пример в терминале: ```bash curl linkedin.com -v ``` (покажет весь разговор: запрос → ответ 301 на https) ### HTTP/1.0 vs HTTP/1.1 * **HTTP/1.0**: открыл соединение → получил ответ → закрыл. Для каждой картинки/файла — новое соединение. * **HTTP/1.1**: соединение держится открытым (keep-alive). Можно быстро отправить много запросов по одному каналу. ### HTTP — stateless (без памяти) Каждый запрос — как первый.Сервер не помнит, что ты уже залогинился. Решение — **Cookies**: 1. При входе сервер выдаёт `Set-Cookie: JSESSIONID=xxx` 2. Браузер сохраняет и отправляет этот cookie с каждым запросом 3. Сервер понимает: «А, это тот же человек» ### HTTPS = HTTP + безопасность Проблемы HTTP: * Всё в открытом тексте (пароль и cookie видно) * Можно подменить IP и сделать фишинг HTTPS решает обе проблемы: * Сервер доказывает, кто он (сертификат) * Всё шифруется ### Как работает HTTPS (простыми словами) 1. Админ сайта создаёт пару ключей + запрос на сертификат 2. Сертификат подписывает trusted центр (DigiCert и др.) 3. Сервер показывает сертификат браузеру 4. Браузер проверяет: * Не просрочен? * Подписан доверенным центром? * Имя домена совпадает? 5. Если всё ок — договариваются о быстром симметричном ключе 6. Дальше весь трафик шифруется этим ключом Проверить сертификат: ```bash curl https://www.linkedin.com -v ``` Увидишь: * subject: www.linkedin.com * issuer: DigiCert * expire date * SSL connection using TLSv1.2 ... Всё! Теперь понятно, как браузер получает страницу безопасно.