Заголовки ответа
Что не так
Где взять блок
DevTools → вкладка Network → нужный запрос → правый клик по нему → Copy → Copy response headers. Вставляйте всё целиком: строку статуса я узна́ю, лишнего не будет.
Включите Preserve log, если смотрите на запрос, после которого происходит переход, — иначе он исчезнет из списка раньше, чем вы до него доберётесь.
Заголовки ответа, а не запроса. В панели Headers два раздела: Request Headers — то, что отправил браузер, Response Headers — то, что вернул сервер. Здесь разбираются вторые.
Пробуете на этой странице? Тогда набор будет скучным: qatoolqa.ru — статический сайт, у него только заголовки безопасности (CSP, HSTS, Referrer-Policy, nosniff) и кеша. Смотреть надо на том сервисе, который вы тестируете.
Три места, где ошибаются чаще всего
no-cache — это не «не кешировать». Ответ с ним сохраняется, просто перед каждым показом браузер спрашивает сервер, не изменилось ли. Чтобы ответ не сохранялся вовсе, нужен no-store. Путаница стоит утечек: страницу с чужими данными находят в кеше после выхода из учётной записи.
Звёздочка и учётные данные несовместимы. Access-Control-Allow-Origin: * вместе с Allow-Credentials: true браузер отвергает целиком — cookie в межсайтовом запросе так не работают. Нужен конкретный origin в ответе. Это самая частая причина «на сервере CORS настроен, а в браузере ошибка».
Cache-Control перебивает Expires. Если стоят оба, браузер смотрит только на первый. Расхождение между ними ничего не ломает, но и ничего не значит — а разбираются в нём подолгу.
Чего разбор не делает
Это разбор текста заголовков, а не проверка защищённости. Он видит, что написано, и не видит, что происходит на самом деле.
Например: Strict-Transport-Security учитывается браузером, только когда ответ пришёл по HTTPS — по обычному http он молча пропускается. Из текста заголовка это не узнать, нужен настоящий запрос.
Так же с Content-Security-Policy: разобрать её строку мало, надо смотреть, что политика на самом деле блокирует на живой странице. Это отдельная работа и отдельная вкладка в DevTools.
И замечания здесь — не приговор. Отсутствие nosniff на странице внутренней админки и на публичной форме загрузки файлов — разные по весу вещи, а инструмент видит только строку.
Частые вопросы
Откуда взять заголовки ответа?
DevTools → Network → нужный запрос → Response Headers, кнопка копирования. Либо curl -i. Вставляйте целиком, разбор сам разложит по строкам.
Почему браузер ругается на CORS, хотя заголовок есть?
Частые причины: Access-Control-Allow-Origin со звёздочкой при запросе с учётными данными, отсутствие ответа на preflight OPTIONS или неполный список разрешённых заголовков.
Что смотреть в заголовках кеша?
Cache-Control и его директивы, наличие ETag или Last-Modified и то, согласуется ли это с задачей страницы. Приватные данные с public в кеше — типичная находка.