← Назад к вопросам

Что такое четыриста двадцать первый статус код?

2.0 Middle🔥 251 комментариев
#Soft skills и карьера#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое HTTP статус-код 421 (Misdirected Request)?

HTTP статус-код 421 Misdirected Request – это клиентский код состояния протокола HTTP, который указывает на то, что запрос был отправлен на сервер, который не способен дать на него ответ. Этот код был введён в спецификации HTTP/2 (RFC 7540, 2015 год) для решения проблемы, связанной с многопоточностью и оптимизацией соединений в новой версии протокола.

Основная причина возникновения

В HTTP/1.1 типичное взаимодействие предполагало одно соединение на один домен. В HTTP/2 появилась возможность мультиплексирования – передачи нескольких запросов параллельно в рамках одного TCP-соединения. Это повышает эффективность, но создаёт новую проблему: если клиент повторно использует существующее соединение для отправки запроса к другому домену (на который это соединение изначально не было установлено), сервер может отказаться его обрабатывать.

Ключевой сценарий:

  • Клиент устанавливает соединение с Сервером А для домена example.com.
  • В рамках этого же соединения клиент пытается отправить запрос, который должен быть направлен к Серверу Б для домена api.example.com (даже если оба домена указывают на один IP-адрес, они могут быть «виртуальными хостами» с разными конфигурациями).
  • Сервер А, получив запрос не для своего домена, отвечает статусом 421, сообщая клиенту: «Я не могу обработать этот запрос, он адресован не мне. Попробуй установить новое соединение».

Техническая суть и пример

Сервер использует заголовок :authority или Host в HTTP/2 (аналог Host из HTTP/1.1), чтобы определить, предназначен ли ему запрос. Если заявленный в запросе домен не соответствует доменам, которые сервер может обслуживать на данном соединении, он возвращает 421.

Пример в коде (логика на стороне сервера):

# Упрощённая псевдологика обработки запроса в HTTP/2
def handle_request(request, connection_domains):
    """
    request: объект HTTP-запроса
    connection_domains: список доменов, которые сервер может обрабатывать на ЭТОМ соединении
    """
    target_domain = request.headers.get(':authority') or request.headers.get('host')

    if target_domain not in connection_domains:
        # Отправляем ответ 421
        response = {
            'status': 421,
            'headers': [
                ('content-type', 'text/plain'),
            ],
            'body': 'Misdirected Request. This server is not configured to respond for the given authority.'
        }
        return response

    # ... обычная обработка запроса ...

Как должен вести себя клиент?

Получив ответ 421 Misdirected Request, клиент (браузер, библиотека типа curl или requests) должен:

  1. Не повторять тот же запрос по этому соединению автоматически.
  2. Установить новое сетевое соединение с сервером, используя правильный целевой хост.
  3. Повторить оригинальный запрос уже через новое, корректное соединение.

Это поведение способствует безопасности и корректному распределению нагрузки, предотвращая потенциальные атаки, связанные с подменой доменов, и обеспечивая правильную работу механизмов балансировки.

Практическая значимость и отладка

  • Для разработчика Backend/DevOps: Этот статус – сигнал о возможной проблеме в конфигурации сервера (например, в настройках веб-сервера nginx/Apache для HTTP/2) или в инфраструктуре (неправильные настройки балансировщика нагрузки или CDN).
  • Для тестировщика (QA Engineer): Встретив 421 код в логах или при ручном тестировании, нужно понимать, что это клиентская ошибка уровня соединения, а не ошибка в данных запроса (как 400 Bad Request) или в самом ресурсе (как 404 Not Found).
    *   **Что проверять**:
        *   Корректность настройки виртуальных хостов на сервере.
        *   Правильность реализации повторных попыток (retry logic) на стороне клиентского приложения.
        *   Работу протокола HTTP/2 в целом (не происходит ли fallback на HTTP/1.1 из-за этой ошибки).
  • В повседневной работе: Обычные пользователи и даже разработчики прикладного уровня редко сталкиваются с 421 напрямую, так как современные HTTP-клиенты (браузеры, fetch, axios) обрабатывают его автоматически, прозрачно переустанавливая соединение.

Отличие от других статус-кодов

  • 421 vs 400 (Bad Request): 400 означает, что запрос синтаксически некорректен или не может быть выполнен из-за клиентской ошибки в самом запросе. 421 же указывает на ошибку выбора соединения для в целом корректного запроса.
  • 421 vs 404 (Not Found): 404 говорит об отсутствии конкретного ресурса на сервере, который успешно принял и понял запрос. 421 означает, что сервер даже не стал искать ресурс, так как запрос изначально попал «не по адресу».

Вывод: Статус-код 421 Misdirected Request – это важный механизм безопасности и целостности протокола HTTP/2, который ensures, что запросы обрабатываются именно тем серверным экземпляром (виртуальным хостом), для которого они предназначены, даже в условиях многопоточного соединения. Для QA-инженера понимание этого кода – признак глубокого знания сетевых протоколов и способности диагностировать сложные проблемы, связанные с инфраструктурой и сетевым взаимодействием.