Какие типы HTTP статус-кодов вы знаете, кроме 200-х, 400-х и 500-х?

«Какие типы HTTP статус-кодов вы знаете, кроме 200-х, 400-х и 500-х?» — вопрос из категории HTTP и веб-протоколы, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Помимо успешных (2xx), клиентских (4xx) и серверных (5xx) ошибок, существуют информационные коды и коды перенаправления, которые также важны для тестирования API и веб-приложений.

1xx (Информационные)

Сервер сообщает о промежуточном состоянии обработки запроса.

  • 100 Continue: Клиент может продолжать отправлять тело запроса. Важно для тестирования больших POST/PUT запросов.
  • 101 Switching Protocols: Сервер соглашается сменить протокол (например, с HTTP на WebSocket). Ключевой статус для тестирования WebSocket-подключений.

3xx (Перенаправление — Redirection)

Сервер указывает клиенту на необходимость дополнительных действий для завершения запроса.

  • 301 Moved Permanently: Ресурс навсегда перемещен на новый URL. Постоянные редиректы должны корректно обрабатываться поисковыми системами и кешироваться клиентами. В тестах нужно проверять заголовок Location.
  • 302 Found / 307 Temporary Redirect: Ресурс временно доступен по другому адресу. 307 предпочтительнее, так как гарантирует, что метод запроса (POST, PUT) не изменится при перенаправлении.
  • 304 Not Modified: Контент не изменился с момента последнего запроса (кеширование). Возвращается при наличии валидных заголовков If-Modified-Since или If-None-Match. Критически важный статус для тестирования механизмов кеширования на клиенте и CDN.

Пример теста на редирект с использованием RestAssured (Java):

@Test
public void testPermanentRedirect() {
    given()
        .redirects().follow(false) // Отключаем автоматическое следование редиректу
    .when()
        .get("/old-endpoint")
    .then()
        .statusCode(301) // Проверяем именно статус редиректа
        .header("Location", endsWith("/new-endpoint")); // Проверяем новый URL
}

Пример теста на кеширование (304):

@Test
public void testCacheValidation() {
    // 1. Первый запрос, получаем ETag
    Response firstResponse = get("/api/resource");
    String eTag = firstResponse.header("ETag");

    // 2. Повторный запрос с этим ETag — должен вернуть 304
    given()
        .header("If-None-Match", eTag)
    .when()
        .get("/api/resource")
    .then()
        .statusCode(304); // Контент не изменился
}

Для QA: Тестирование 1xx и 3xx статусов — это проверка корректности работы протокола HTTP, механизмов кеширования, SEO-дружественности редиректов и функциональности, основанной на смене протоколов (WebSockets).