Что означают HTTP статус-коды 1xx и как вы их тестировали?

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

Ответ

Коды 1xx — информационные (Informational). Они указывают, что сервер получил запрос и продолжает его обработку, но клиент должен ожидать окончательного ответа.

Наиболее релевантные коды:

  • 100 Continue: Сервер готов принять тело запроса. Клиент должен отправить его после получения этого кода. Используется для оптимизации, например, перед отправкой большого файла.
  • 101 Switching Protocols: Сервер соглашается сменить протокол по запросу клиента (например, переход с HTTP на WebSocket по заголовку Upgrade).

Как это тестируется на практике?

  1. Автоматическая обработка: Современные HTTP-клиенты (например, requests в Python) обрабатывают 100 Continue прозрачно, если отправить заголовок Expect: 100-continue.
  2. Тестирование WebSocket-апгрейда: Проверка, что сервер корректно отвечает 101 на запрос с заголовками Upgrade: websocket и Connection: Upgrade.

Пример кода для проверки сценария с Expect: 100-continue:

import requests

# Отправка запроса с ожиданием промежуточного ответа 100 Continue
headers = {'Expect': '100-continue'}
# requests автоматически обработает статус 100 и отправит тело
response = requests.post('https://api.example.com/upload', 
                         headers=headers, 
                         data=large_file_data)
# Проверяем уже окончательный ответ
assert response.status_code == 200

Важность для тестировщика: Понимание 1xx кодов критично для тестирования:

  • Протоколов реального времени (WebSockets, Server-Sent Events).
  • Оптимизированной загрузки данных (чункированная передача, большие файлы).
  • Сетевого взаимодействия низкого уровня (например, с помощью Wireshark).