Глава 22 · Веб-разработка с Python

Как браузер получает веб-страницу

От нажатия Enter в адресной строке до готовой страницы на экране — путь одного запроса.

Раздел 22.1 показал общую картину: браузер отправляет запрос, сервер отвечает. Теперь разберём этот путь по шагам — что в точности происходит между нажатием Enter в адресной строке и появлением страницы на экране.

URL
адрес в строке браузера
DNS
домен → IP-адрес
Соединение
браузер связывается с сервером по IP
HTTP-запрос
браузер посылает запрос
Приложение
сервер готовит ответ
HTTP-ответ
ответ возвращается браузеру
Отрисовка
браузер показывает страницу
Путь от адресной строки до готовой страницы на экране

DNS: как доменное имя связывается с сетевыми адресами

Домен вроде python.org удобен человеку, но компьютеры в интернете находят друг друга по числовым IP-адресам. Служба DNS (Domain Name System — система доменных имён) хранит соответствия между доменами и записями, которые помогают найти нужный сервер, и превращает домен в IP-адрес прежде, чем браузер сможет отправить запрос.

Один домен — не обязательно один постоянный IP-адрес
У крупных сайтов один и тот же домен на практике может отвечать разными IP-адресами в разное время или в разных регионах — например, чтобы распределять нагрузку между несколькими серверами или ускорить доставку данных пользователям в разных частях света. Модель «один домен — ровно один сервер навсегда» верна только для самых простых случаев.

Соединение и запрос

Получив IP-адрес, браузер устанавливает соединение с сервером и отправляет HTTP-запрос — его устройство подробно рассматривается в разделе 22.9. Сервер (в нашем случае — приложение на Flask) обрабатывает запрос и отправляет HTTP-ответ: обычно HTML-страницу, но иногда — данные в формате JSON (раздел 22.15), изображение или файл.

Отрисовка

Получив ответ, браузер разбирает HTML и строит из него дерево DOM (раздел 22.4). По мере разбора он находит ссылки на CSS и JavaScript и запрашивает их отдельными HTTP-запросами (раздел 22.14); отображение страницы при этом может обновляться постепенно, по мере получения нужных данных, а не только после того, как загрузится буквально всё.

Мы намеренно не разбираем TCP/IP на уровне пакетов
У соединения между браузером и сервером есть более глубокие технические уровни — разбиение данных на пакеты, подтверждение доставки и так далее. Для веб-разработки на уровне этой главы достаточно мысленной модели «браузер посылает запрос — сервер отвечает»; сетевые протоколы этого уровня — тема отдельного курса.