Является ли протокол HTTP синхронным или асинхронным?

«Является ли протокол HTTP синхронным или асинхронным?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP — это синхронный протокол по своей основе (запрос-ответ).

Модель работы:

  1. Клиент устанавливает TCP-соединение.
  2. Клиент отправляет HTTP-запрос и блокирует ожидание ответа.
  3. Сервер обрабатывает запрос и отправляет HTTP-ответ.
  4. Соединение может быть закрыто (HTTP/1.0) или использовано для новых запросов (Keep-Alive).

Пример синхронного вызова в Java:

// Синхронный запрос блокирует поток до получения ответа
HttpResponse<String> response = HttpClient.newHttpClient()
        .send(request, HttpResponse.BodyHandlers.ofString());
// Следующая строка выполнится только после получения ответа
System.out.println("Status Code: " + response.statusCode());

Асинхронное поведение поверх HTTP достигается на уровне приложения:

  • AJAX/Fetch API в браузерах.
  • Асинхронные клиенты (например, HttpClient.sendAsync() в Java).
  • Долгоживущие соединения: HTTP/2 Server Push, WebSockets, Server-Sent Events (SSE).

Таким образом, синхронность HTTP — это характеристика протокола, а асинхронность — архитектурный подход, реализуемый поверх него.