$ cat ./chto-proishodit-kogda-otkryvaete-sajt.md
Вы набрали https://bazil.pw и нажали Enter. Между этим моментом и картинкой на экране происходит примерно полтора десятка договорённостей. Пройдём по ним по порядку.
1. DNS: имя → IP
Браузер сначала спрашивает у системы: «какой IP у bazil.pw?». Система лезет в DNS-резолвер (обычно 8.8.8.8 или резолвер провайдера). Оттуда приходит A-запись — IP сервера.
Проверяем руками:
dig +short bazil.pw
2. TCP: рукопожатие
Браузер открывает TCP-соединение к IP на порт 443. Три пакета — легендарное рукопожатие:
клиент → сервер: SYN
сервер → клиент: SYN-ACK
клиент → сервер: ACK
С этого момента между браузером и сервером существует виртуальный надёжный канал.
3. TLS: шифрование
Над TCP ставится TLS — обёртка, шифрующая всё содержимое. Браузер и сервер договариваются о ключах (это и есть «замочек» в адресной строке). Сервер показывает сертификат, браузер сверяет его с доверенными центрами — и только после этого считает соединение безопасным.
Увидеть всё рукопожатие целиком:
openssl s_client -connect bazil.pw:443 -brief </dev/null
curl -v https://bazil.pw 2>&1 | grep -E 'SSL|subject'
4. HTTP: запрос и ответ
Теперь можно говорить. Браузер шлёт:
GET / HTTP/1.1
Host: bazil.pw
User-Agent: Mozilla/5.0 ...
Accept: text/html,image/avif,...
Сервер отвечает:
HTTP/2 200
content-type: text/html
cache-control: public, max-age=0, must-revalidate
Далее идёт тело ответа — байты HTML. Кстати, до сервера запрос проходит через CDN/прокси и балансировщик, которые решают: «этот запрос уже был в кэше? нет? тогда отдадим на backend». Поэтому время ответа бывает маленьким даже на тяжёлых страницах.
5. Рендеринг
Браузер разбирает HTML, находит <link rel="stylesheet"> и <script> — качает каждый по новому запросу (поверх того же TCP/TLS), картинки грузит лениво. Шрифты, если они локальные, приходят из папки /_astro/fonts.
Если интересно, сколько всего грузится:
curl -s https://bazil.pw | grep -oE 'src="[^"]+"|href="[^"]+\.(css|js)"' | head -20
Где взять полную картину
- Вкладка Network в DevTools — каждый запрос, статус, время, размер.
- DevTools → Network → правой кнопкой → Copy as cURL — повторить запрос из терминала.
curl -w 'time_total: %{time_total}s' -o /dev/null https://bazil.pw— общее время.
Вся «магия сети» — это просто 5 пунктов выше, повторяющихся на каждом шаге. Научитесь видеть их в DevTools — и любая неработающая страница станет головоломкой с ответом, а не чёрным ящиком.