Ответ
HTTP — это синхронный протокол по своей основе (запрос-ответ).
Модель работы:
- Клиент устанавливает TCP-соединение.
- Клиент отправляет HTTP-запрос и блокирует ожидание ответа.
- Сервер обрабатывает запрос и отправляет HTTP-ответ.
- Соединение может быть закрыто (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 — это характеристика протокола, а асинхронность — архитектурный подход, реализуемый поверх него.