Какова структура HTTP-ответа
Что проверяют
Базовую сетевую грамотность и то, насколько уверенно вы читаете ответ сервера при разборе бага. Ответ обычно разворачивают: просят разобрать живой ответ из DevTools или объяснить, чем 401 отличается от 403 и когда уместен 304.
Как отвечать
Структура в терминах HTTP/1.1:
- статусная строка: версия, код и текстовое пояснение, например
HTTP/1.1 404 Not Found. Пояснение произвольное, полагаться нужно на код; - заголовки: строки вида
Имя: значение, по одной на строку. Имя регистронезависимо, некоторые заголовки (Set-Cookie) повторяются несколько раз; - пустая строка: отделяет заголовки от тела. Именно она, а не разделитель между заголовками;
- тело: необязательно. Его нет у
204,304и у ответа наHEAD.
Дальше коды по классам: 2xx (200, 201 вместе с Location, 204), 3xx (301 и 308 постоянные, 302 и 307 временные, 304 при совпадении ETag), 4xx (400 про формат, 401 про отсутствие аутентификации и обязательный WWW-Authenticate, 403 про нехватку прав, 409 конфликт, 429 вместе с Retry-After), 5xx (500, 502, 503, 504).
Заголовки, которые чаще всего проверяют в тестах: Content-Type с кодировкой, Content-Length либо Transfer-Encoding: chunked, кэширование (Cache-Control, ETag, Last-Modified, Vary), Set-Cookie с флагами HttpOnly, Secure, SameSite, заголовки CORS.
Плюс балл дают за уточнение: в HTTP/2 и HTTP/3 текстового представления нет. Заголовки сжимаются (HPACK и QPACK), пишутся строчными буквами, код приезжает псевдозаголовком :status, пояснения к нему нет вовсе. Смотреть ответы удобно через curl -i, вкладку Network, Postman, прокси Proxyman.
Где спотыкаются
Повторяют миф, что заголовки отделяются друг от друга пустой строкой. Пустая строка одна и стоит перед телом, а заголовки разделены переводом строки.
Считают текстовое пояснение частью контракта и пишут автотест на строку OK. Сервер вправе прислать другое слово, а в HTTP/2 этого поля нет физически.
Путают 401 и 403 и заодно принимают 200 с полем error в теле. Для клиента, кэша и мониторинга это разные истории, а подмена кода двухсоткой прячет ошибки от алертов.