HEAD и GET дают разные ответы: какой результат учитывать в мониторинге

HEAD успешен, а GET выдаёт ошибку — или наоборот? Сравниваем запросы в одинаковых условиях и выбираем проверку, которая отвечает задаче мониторинга.

Если HEAD и GET возвращают разные коды, для проверки открытия обычной страницы ориентируйтесь на GET и содержимое ответа. Успешный HEAD не доказывает, что HTML сформирован и передан, а ошибка HEAD сама по себе не означает, что посетители не могут открыть сайт.

Сначала сравните оба метода для одного URL в одинаковых условиях, затем найдите слой, который меняет результат. Не добавляйте ошибочный код в список допустимых только ради исчезновения тревоги.

Что проверяет HEAD, а что — GET

GET получает представление ресурса, например HTML страницы. HEAD запрашивает ответ без тела: по RFC 9110 его семантика соответствует GET, но сервер не должен отправлять содержимое. Некоторые заголовки, вычисляемые при генерации тела, могут отсутствовать; отсутствие Content-Length у HEAD само по себе не доказывает неисправность.

На практике приложение, прокси, CDN или защитный фильтр могут обрабатывать методы по-разному. Поэтому HEAD полезен для контроля ответа без передачи тела, но не заменяет проверку текста, размера или полной загрузки ресурса. И GET через curl не выполняет JavaScript, вход в кабинет или оплату.

1. Сравните один адрес без редиректов

Выберите небольшой публичный URL своего сайта, который безопасно читать. Зафиксируйте время и часовой пояс, точный путь и ожидаемый результат; не используйте ссылку с токеном или операцией изменения данных.

В терминале выполните пару запросов, заменив example.com своим адресом:

curl -sS --max-time 20 -I 'https://example.com/page/'
curl -sS --max-time 20 -D - -o /dev/null 'https://example.com/page/'

Первый запрос — HEAD, второй — обычный GET, тело которого скачивается и отбрасывается. Предел 20 секунд выбран только для примера; выход curl по тайм-ауту нельзя записывать как полученный HTTP-код.

В документации curl параметр -I предназначен для HEAD. Не заменяйте его на -X HEAD: эта опция меняет слово метода, но не переводит клиент в правильный режим обработки ответа без тела.

Оба запроса идут без авторизации, из одной сети, с одинаковым клиентом и без автоматического перехода. Сравните:

  • код ответа и Location;
  • Content-Type, Cache-Control, Age и доступные признаки CDN-кэша;
  • Allow при ответе 405;
  • завершился ли GET без ошибки передачи.

Значения Set-Cookie и других чувствительных заголовков не копируйте в общий отчёт. Если ошибка зависит от входа в кабинет, отдельно сравните гостевой и авторизованный режимы в браузере, не передавая cookie в переписке.

2. Проверьте переходы и реальное тело

Если получен редирект, повторите пару с параметром -L. Так будут видны заголовки переходов; сверяйте не только последний код, но и каждый Location. Успешная страница входа после редиректа не подтверждает доступность исходного ресурса.

Для небольшого публичного HTML можно временно убрать -o /dev/null из GET и посмотреть содержимое локально. Ответ 200 с заглушкой, страницей проверки браузера или сообщением об ошибке приложения — иной результат, чем ожидаемая страница.

Если без авторизации оба метода успешны, а браузер показывает сбой, переходите к Network и Console: причина может быть в ресурсах страницы, сессии или клиентском коде. Повторение HEAD здесь не проверит сломанный сценарий.

3. Разберите сочетание результатов

HEAD возвращает 405, GET — ожидаемую страницу

Проверьте Allow и регистрацию HEAD для конкретного маршрута. Отказ метода отличается от общей недоступности: порядок поиска в приложении и серверных правилах описан в руководстве по 405 Method Not Allowed.

Если цель — открытие страницы посетителем, используйте подтверждённую GET-проверку. Если HEAD нужен балансировщику или другому клиенту, исправляйте поддержку метода отдельно; не разрешайте все методы на всём сайте.

HEAD возвращает 200, GET — 500 или ошибку загрузки

HEAD мог не пройти путь генерации и передачи тела. Сопоставьте запросы с журналами приложения, прокси и CDN: обработчик мог завершить HEAD раньше, чем GET обращается к данным или формирует HTML.

Такой HEAD нельзя считать доказательством исправности страницы. Проверяйте GET и ожидаемое содержимое; при обрыве передачи важен также результат завершения запроса, а не только уже полученный статус 200.

Один метод получает 403, 429 или другой редирект

Проверьте события WAF, ограничения частоты и правила по методу. Заголовки и оформление ответа дают подсказку, но источник отказа подтверждают журналы: прокси может заменить их.

Повторите пару после разумной паузы, затем из другой доступной сети. Если результат меняется между запросами одного метода, сначала исследуйте нестабильность узлов или кэша — отличия нельзя автоматически приписывать HEAD/GET.

4. Найдите слой и подтвердите исправление

Идите от внешнего ответа к CDN/WAF, reverse proxy и приложению, сопоставляя время, URL и метод. Отсутствие запроса в одном журнале не доказывает отказ до сервера: проверьте полноту логирования и другие узлы.

Для кэша сравните Age и признаки попадания в кэш, затем согласуйте точечную проверку с администратором. Не очищайте весь CDN ради эксперимента: это изменит нагрузку и затруднит сравнение.

После исправления повторите исходную пару и проверку тела GET на всех доступных администратору узлах.

Как выбрать правило мониторинга

Для публичной страницы разумная основа — безопасный GET, ожидаемый конечный адрес, код и устойчивый признак содержимого. Для специально выделенного endpoint критерии определяет его назначение; HEAD подходит, когда достаточно ответа без тела и поддержка метода проверена.

Не переносите успех с одного метода на другой и не расширяйте допустимые коды без объяснения. Одиночное измерение не подтверждает стабильность, а обычный HTTP-контроль не проверяет доставку формы или работу браузерного приложения.

Web-Puls можно использовать для регулярного контроля доступности выбранного публичного URL. Перед подключением уточните фактический метод и правила проверки; эта статья не предполагает, что сервис позволяет произвольно менять метод.

Если причина различий остаётся между приложением, прокси и защитой, отправьте заявку на диагностику. Укажите публичный URL, время, результаты HEAD/GET и недавние изменения без секретов: специалист оценит задачу и предложит формат работ.

Проверьте свой сайт прямо сейчас

Введите адрес сайта: Web-Puls покажет HTTP-код, время ответа и базовую диагностику. Для постоянного контроля можно подключить мониторинг.

Нужна помощь с диагностикой ошибки?

Опишите симптомы в короткой заявке: URL, код ответа, время появления и что менялось перед сбоем. Специалист поддержки оценит задачу и предложит формат работ.