Что происходит при открытии сайта
Собираем общую картину: что происходит сверху вниз, когда вы вводите адрес сайта и жмёте Enter.
Это «обзор с высоты птичьего полёта» — каждый шаг мы подробно разберём в следующих разделах. Сейчас важно увидеть всю цепочку целиком.
Сценарий: вы открываете сайт
Вы вводите https://shop.example.com и нажимаете Enter. Вот что происходит, в правильном порядке:
- Разбор URL. Браузер раскладывает адрес на части: схема (
https), хост (shop.example.com), порт (по умолчанию 443), путь, query-параметры. - DNS. Имя
shop.example.comнужно превратить в IP-адрес. Браузер спрашивает у DNS-резолвера и получает, например,93.184.216.34. - TCP-соединение. С этим IP по порту 443 устанавливается TCP-соединение через «трёхстороннее рукопожатие» (SYN → SYN-ACK → ACK).
- TLS-рукопожатие. Поскольку это HTTPS, поверх TCP согласуется шифрование: проверяется сертификат сервера, договариваются о ключах.
- HTTP-запрос. Браузер отправляет запрос вида
GET / HTTP/1.1с заголовками (Host, User-Agent, Cookie и т.д.). - Обработка на сервере. Сервер принимает запрос, возможно, лезет в базу, формирует HTML и отвечает со статусом (например,
200 OK). - Рендеринг. Браузер получает HTML, видит ссылки на CSS, JS, картинки — и для каждого ресурса при необходимости повторяет шаги выше.
Где на этих шагах лежат уровни
URL, DNS, HTTP, TLS -> прикладной уровень
TCP-рукопожатие, порт 443 -> транспортный уровень
IP-адрес, маршрутизация -> сетевой уровень
Wi-Fi/Ethernet до роутера -> канальный уровень
Разбор URL прямо сейчас
Первый шаг — разбор адреса — легко показать на чистом Python из стандартной библиотеки. Модуль urllib.parse делает ровно то, что делает браузер: раскладывает URL на компоненты.
from urllib.parse import urlparse, parse_qs
url = 'https://shop.example.com:443/catalog/items?page=2&sort=price#reviews'
p = urlparse(url)
print('Схема (протокол):', p.scheme)
print('Хост: ', p.hostname)
print('Порт: ', p.port)
print('Путь: ', p.path)
print('Query: ', p.query)
print('Фрагмент: ', p.fragment)
print('Параметры: ', parse_qs(p.query))
Вывод:
Схема (протокол): https
Хост: shop.example.com
Порт: 443
Путь: /catalog/items
Query: page=2&sort=price
Фрагмент: reviews
Параметры: {'page': ['2'], 'sort': ['price']}
Браузер делает то же самое, только в нативном коде, и дальше использует hostname для DNS, port для соединения, а path и query уходят в HTTP-запрос.
Зачем держать эту картину в голове
Это самый частый вопрос на собеседовании: «Что происходит, когда вы вводите URL и жмёте Enter?». Хороший ответ проходит по всей цепочке: URL → DNS → TCP → TLS → HTTP → рендеринг. В последнем разделе курса мы разберём этот вопрос максимально подробно. Сейчас держите в голове скелет — на него мы будем «навешивать» детали.
Итог
- Открытие сайта — это цепочка: URL → DNS → TCP → TLS → HTTP → рендеринг.
- Каждый шаг живёт на своём уровне модели.
- Разбор URL — это работа прикладного уровня; в Python его делает
urllib.parse. - Эту цепочку нужно уметь рассказать целиком — это классика собеседований.