Каковы основные причины отсутствия ответа от сервера на HTTP-запрос?

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

Ответ

Отсутствие ответа (timeout) указывает на проблемы на сетевом или серверном уровне, а не на уровне приложения. Основные причины:

  1. Проблемы с сетью:

    • Обрыв соединения между клиентом и сервером.
    • Блокировка запроса сетевым фаерволом или IPS.
    • Проблемы с DNS-резолвингом имени сервера.
  2. Проблемы с сервером:

    • Серверная машина выключена или не имеет сетевой доступности.
    • Веб-сервер (nginx, Apache) или контейнер приложения (Tomcat, Gunicorn) не запущен.
    • Сервер перегружен и не успевает обрабатывать запросы в очереди.
  3. Проблемы в приложении:

    • Бесконечный цикл или deadlock в коде обработки запроса.
    • Долгая операция (например, тяжелый запрос к БД), превышающая таймаут.

Диагностика:

  • Проверить базовую доступность: ping <host> или telnet <host> <port>.
  • Использовать cURL с таймаутами и подробным выводом:
    curl -v --max-time 5 --connect-timeout 3 http://api.example.com/resource

    Коды ошибок cURL: (28) — timeout, (7) — не удалось соединиться.

  • Анализировать логи: проверить логи сервера (access.log, error.log) и приложения на предмет получения запроса.