Знакомы ли вы с HTTP
Что проверяют
Вопрос звучит как «да или нет», но ждут короткий рассказ о том, что вы знаете о протоколе и как работаете с ним из Python. Следом почти всегда идут уточнения: чем 401 отличается от 403, какие методы идемпотентны, что поменялось в HTTP/2.
Как отвечать
Не отвечайте «да, знаком». Покажите три слоя.
Протокол:
- запрос и ответ: метод, путь, заголовки, тело; в ответе статус, заголовки, тело. Протокол не хранит состояние, сессии держатся на cookie или токене в
Authorization; - методы:
GET,HEAD,PUT,DELETEидемпотентны,POSTнет, поэтому повторять автоматически можно не всё; - статусы: 201 и 204 для создания и пустого ответа, постоянные 301 и 308 против временных 302 и 307, 304 при кэшировании по
ETag, 401 «не аутентифицирован» и 403 «нет прав», 422 для ошибок валидации, 429 для лимитов, 502 и 504 от прокси; - версии: HTTP/1.1 с keep-alive, HTTP/2 с мультиплексированием запросов в одном TCP-соединении, HTTP/3 поверх QUIC на UDP. HTTPS это HTTP поверх TLS.
Клиент в Python: requests для синхронного кода, httpx для синхронного и асинхронного с поддержкой HTTP/2, aiohttp в асинхронных сервисах. Упомяните Session или Client для переиспользования соединений и raise_for_status().
Сервер: WSGI для Django и Flask под gunicorn, ASGI для FastAPI под uvicorn, а перед приложением обычно стоит nginx, который завершает TLS.
Где спотыкаются
Вызывают requests.get без timeout. По умолчанию таймаута у requests нет, и зависший сервер подвешивает воркер навсегда. У httpx таймаут по умолчанию есть, 5 секунд.
Говорят, что HTTPS «использует SSL». SSL давно выведен из употребления, сейчас это TLS 1.2 и 1.3.
Путают 401 и 403 или возвращают 200 с полем error в теле. Клиенты, ретраи и мониторинг ориентируются на статус, и такая ошибка ломает всю цепочку.