Ответ 1
В чрезвычайно грубом и упрощенном эскизе, предполагая простейший возможный HTTP-запрос, никаких прокси-серверов, IPv4 и никаких проблем на любом этапе:
- браузер проверяет кеш; если запрашиваемый объект находится в кеше и является свежим, перейдите к # 9
- браузер запрашивает ОС для IP-адреса сервера.
- ОС выполняет поиск DNS и отвечает на IP-адрес в браузере
- браузер открывает TCP-соединение с сервером (этот шаг намного сложнее с HTTPS)
- браузер отправляет HTTP-запрос через TCP-соединение.
- браузер получает ответ HTTP и может закрыть TCP-соединение или повторно использовать его для другого запроса
- браузер проверяет, является ли ответ перенаправлением или условным ответом (коды состояния результата 3xx), запрос авторизации (401), ошибка (4xx и 5xx) и т.д.; они обрабатываются иначе, чем обычные ответы (2xx)
- если кэшируемый, ответ хранится в кеше
- браузер декодирует ответ (например, если он gzipped)
- браузер определяет, что делать с ответом (например, является ли это HTML-страницей, является ли это образ, является ли это звуковым клипом?)
- браузер отображает ответ или предлагает диалог загрузки для непризнанных типов
Опять же, обсуждение каждого из этих пунктов заполнило бесчисленные страницы; возьмите это только как краткое резюме. Кроме того, есть много других вещей, которые происходят параллельно с этим (обработка введенного адреса, спекулятивная предварительная выборка, добавление страницы в историю браузера, отображение прогресса пользователю, уведомление плагинов и расширений, отображение страницы во время ее загрузки, конвейерная обработка, отслеживание соединений для поддерживать работоспособность, проверять наличие вредоносного контента и т.д.), и вся операция становится более сложной с HTTPS (сертификаты и шифры и пиннинг, о мой!).