3 заголовка, которые я проверяю первыми (и вам советую)

Я не смотрю тело ответа, пока не проверил шапку.

Звучит как странный ритуал, но за 5+ лет я привык: баги сидят не в JSON, а в том, что сервер думает про твой запрос.

🔥 Content-Type

Content-Type в запросе - это униформа. Одел application/json - значит, "я JSON". Одел text/plain - значит, "я просто текст".

Большинство фреймворков ВООБЩЕ не проверяют униформу. И чем больше остается на откуп фреймворку - тем больше дыр в безопасности сервиса.

Схема, rate limit, логи: всё валится, уже писал подробно тут 👉 и всем рекомендую заглянуть.

Проверяется за 10 секунд: curl -X POST /api/users -H "Content-Type: text/plain" -d '{"role": "admin"}'

200 OK вместо 415 Unsupported Media Type => дверь открыта, звоним команде.

⚡️ Cache-Control Самый коварный заголовок - баг плавающий.

Обновил данные - API отвечает старыми. Перезашёл - новыми. MAGIC 🪄

На самом деле - сервер закэшировал ответ и радует пользователей вчерашними новостями.

Я такое ловил на проде: пользователи жалуются, что данные не обновляются. Девопсы клянутся: "всё чистили". А ответ всё равно летит из кэша, потому что Cache-Control не настроен.

Тоже 10 секунд на локализацию и все поймешь:

POST на создание → GET на чтение. Ответ без Cache-Control: no-cache ? С вероятностью 90% там кэш.

PUT/PATCH а потом снова GET. → Свежие данные? Всё ок. Закэшированное старьё? -> Баг репорт! Если баг «плавает» - кинь в URL параметр ?v=1. Баг исчез? Поздравляю, ты локализовал проблему.

👉 Подробный разбор кэширования с примерами:

🛡 CORS

Любимая отмазка фронтендеров: CORS - это не наша проблема

На самом деле CORS - это пояс верности акт доверия****❤️ Сервер говорит браузеру: "этому домену я доверяю".

Если CORS настроен через * - доверять можно всем. Включая сайт, который украдёт твои данные.

10 секунд на локализацию: Шлёшь запрос с Origin: https://evil.com Смотришь Access-Control-Allow-Origin в ответе. Если там ***** или твой evil.com - у тебя проблемы.

Кидай в комментах, какие находил баги в заголовке.

Пишу свою намеренно БAГОВАННУЮ АПИ-шку, собираю кейсы. Делитесь, дам попробовать до запуска :)


В этом посте были ссылки, но мы их удалили по правилам Сетки