Урок по треку Сети и HTTP 8 мин

Что происходит, когда вводишь адрес

DNS, TCP и TLS, запрос, парсинг HTML и рендер: классический вопрос целиком по шагам.

Классический вопрос: «Что происходит после того, как ввёл https://shop.ru и нажал Enter?». Ответ проверяет, видишь ли ты всю цепочку целиком. Идём по шагам.

1. Разбор ввода

Браузер решает, URL это или поисковый запрос. Если схемы нет, подставит https:// (современные браузеры по умолчанию пробуют HTTPS). Если домен в HSTS-списке (заголовок Strict-Transport-Security получен раньше или домен в preload-списке браузера), запрос по http:// даже не уйдёт: браузер сразу пойдёт по HTTPS.

Ещё до сети браузер может отдать страницу из bfcache (при навигации «назад») или проверить HTTP-кеш и Service Worker.

2. DNS

Нужен IP-адрес. Цепочка кешей: кеш браузера → кеш ОС (и hosts) → рекурсивный резолвер (провайдер, 1.1.1.1, 8.8.8.8). Если у резолвера нет ответа, он спрашивает:

  1. корневой сервер: «кто отвечает за .ru?»
  2. сервер зоны .ru: «кто отвечает за shop.ru?»
  3. авторитетный сервер shop.ru: «какой A/AAAA-адрес?»

Ответ кешируется на время TTL. DNS-запросы обычно идут по UDP на порт 53; бывают зашифрованные DoH (DNS over HTTPS) и DoT.

3. Соединение

  • TCP: тройное рукопожатие SYN → SYN-ACK → ACK, 1 RTT.
  • TLS 1.3: ClientHello → ServerHello + сертификат → Finished, ещё 1 RTT. Браузер проверяет сертификат: цепочка до доверенного корня, имя домена, срок действия. Через ALPN стороны договариваются о протоколе (h2 или http/1.1).
  • HTTP/3 работает поверх QUIC (UDP): транспорт и TLS объединены, рукопожатие 1 RTT, а при повторном соединении возможно 0-RTT. Браузер узнаёт о поддержке из заголовка Alt-Svc или DNS-записи HTTPS.

4. HTTP-запрос и ответ

GET / HTTP/2
Host: shop.ru
Accept: text/html
Cookie: sid=...

По пути запрос может пройти CDN, балансировщик, reverse proxy (nginx), и только потом приложение. Ответ может быть редиректом (301/302 + Location), тогда цикл повторяется. Если всё хорошо: 200 OK, Content-Type: text/html, тело часто сжато (Content-Encoding: br или gzip).

5. Парсинг и построение DOM

Браузер читает HTML потоком и строит DOM. Встретив ресурсы, действует по-разному:

  • <link rel="stylesheet"> грузится параллельно, но блокирует рендер: без CSSOM страницу не нарисуют.
  • <script> без атрибутов блокирует парсинг: HTML ждёт загрузки и выполнения скрипта.
  • <script defer> грузится параллельно, выполняется после разбора HTML, по порядку.
  • <script async> грузится параллельно, выполняется сразу по готовности, порядок не гарантирован.
  • type="module" по умолчанию ведёт себя как defer.

Preload scanner заранее находит ресурсы ниже по документу и начинает их грузить, даже пока парсер стоит.

6. CSSOM, render tree, layout, paint, composite

  1. Из CSS строится CSSOM.
  2. DOM + CSSOM = render tree (только видимые узлы: display: none туда не попадает).
  3. Layout: расчёт размеров и позиций.
  4. Paint: отрисовка пикселей по слоям.
  5. Composite: слои собираются в кадр, часто на GPU.

Событие DOMContentLoaded срабатывает, когда HTML разобран и defer-скрипты выполнены. load ждёт все ресурсы, включая картинки.

7. Дальше

JS навешивает обработчики, фреймворк гидрирует разметку, подгружаются ленивые чанки и картинки. Изменение геометрии потом вызывает reflow (layout), изменение только цвета repaint, а transform и opacity можно менять без них, на этапе composite.

Как ускорить каждый этап

  • DNS и соединение: <link rel="preconnect">, CDN ближе к пользователю, HTTP/3.
  • Ответ: кеширование, сжатие Brotli, 103 Early Hints.
  • Рендер: критический CSS, defer для скриптов, меньше JS, размеры у картинок.

Что спросят на собесе

  • Расскажи по шагам от ввода адреса до отрисовки.
  • Как работает DNS-резолвинг?
  • Сколько RTT занимает установка HTTPS-соединения на TCP+TLS 1.3 и на HTTP/3?
  • Чем отличаются async и defer, что блокирует рендер?
  • Что такое critical rendering path?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.