Как браузер взаимодействует с сервером по HTTP?

«Как браузер взаимодействует с сервером по HTTP?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Взаимодействие строится по модели клиент-сервер с использованием протокола HTTP/HTTPS. Основной цикл — запрос-ответ.

Последовательность шагов для загрузки страницы:

  1. Пользовательский запрос: Ввод URL в адресную строку или клик по ссылке.
  2. DNS-запрос: Браузер преобразует доменное имя (example.com) в IP-адрес сервера.
  3. Установка соединения: Браузер устанавливает TCP-соединение с сервером (для HTTPS — дополнительное TLS-рукопожатие).
  4. Отправка HTTP-запроса: Браузер формирует и отправляет HTTP-сообщение.
  5. Обработка на сервере: Сервер (веб-сервер, бэкенд-приложение) обрабатывает запрос, подготавливает ресурсы.
  6. Получение HTTP-ответа: Сервер отправляет ответ обратно браузеру.
  7. Рендеринг: Браузер разбирает ответ (обычно HTML), загружает связанные ресурсы (CSS, JS, изображения) и отрисовывает страницу.

Структура HTTP-сообщений

Пример HTTP-запроса (GET):

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.9
Connection: keep-alive

Пример HTTP-ответа (успешного):

HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 12:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1234

<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body>...</body>
</html>

Для динамических приложений (SPA):

После первоначальной загрузки страницы взаимодействие часто переходит в асинхронный режим с использованием:

  • AJAX (Fetch API / XMLHttpRequest): Для фоновой загрузки данных без перезагрузки страницы.
  • WebSockets: Для постоянного двустороннего соединения, позволяющего серверу отправлять данные клиенту без запроса (чаты, уведомления, онлайн-игры).