Перейти к основному содержимому

Руководства / Коды состояния HTTP: разбор

200 OK: что означает и что скрывает

200 OK означает, что сервер получил запрос, понял его и вернул успешный ответ, но ничего не говорит о том, верно ли содержимое этого ответа. Уведомление о техработах, страница ошибки и пустой шаблон - все это может отдаваться с кодом 200.

Что гарантирует 200

200 - это стандартный статус успеха. Он сообщает узкий и конкретный набор фактов: DNS разрешился, TCP-соединение установлено, TLS согласован, если URL был HTTPS, сервер принял строку запроса и заголовки и сформировал ответ, который считает успешным. Для GET тело - это запрошенный ресурс; для POST - результат действия.

Чего 200 не говорит - содержит ли страница каталог товаров, отрисовалась ли форма оформления заказа, получил ли свои данные JavaScript, заполняющий страницу, и является ли полученный вами ответ тем же, что получают ваши посетители в другой стране. Все это живет в теле, а код состояния в тело никогда не заглядывает.

200, который на самом деле сбой

Мониторинга по одному лишь коду состояния недостаточно, потому что сломанный сайт отвечает 200 во всех этих случаях:

  • Страница технических работ. Намеренно отдается с кодом 200 скриптом деплоя или правилом CDN. Аптайм выглядит идеальным все окно простоя.
  • Пойманное исключение приложения. Фреймворк ловит ошибку и отрисовывает дружелюбную страницу "что-то пошло не так" через обычный конвейер шаблонов, который выставляет статус по умолчанию 200.
  • Мягкий 404. Сообщение "страница не найдена", возвращаемое с кодом 200 вместо 404. Посетители путаются, а поисковые системы могут продолжать держать URL в индексе или посчитать весь паттерн низкокачественным.
  • Пустая оболочка, отрисованная клиентом. HTML-документ загружается нормально, но вызов API, который его заполняет, провалился. Статус - 200, а страница пуста.
  • Устаревшая или не на том языке закэшированная копия. Граничный узел, у которого не удался запрос к источнику, продолжает отдавать то, что у него уже есть, с кодом 200.
  • Припаркованный или перехваченный домен. После смены DNS он отвечает 200 с чужим содержимым.

Медленный 200 - это все еще проблема

Время отклика часто важнее кода. Страница, которой требуется двенадцать секунд, чтобы вернуть 200, для большинства посетителей функционально недоступна - они уйдут раньше, чем она загрузится. У кода состояния вообще нет временного измерения, поэтому время отклика нужно измерять и ограничивать порогом отдельно. По той же причине стоит следить и за размером: 200, возвращающий 300 байт там, где обычно возвращает 80 КБ, - сильный сигнал того, что страница отрисовалась без содержимого.

Как проверить, что 200 - настоящий успех

  1. Читайте строку статуса и время отклика вместе:
    curl -sI -o /dev/null -w "%{http_code} in %{time_total}s\n" https://example.com/
  2. Получите тело и проверяйте по строке, которая появляется только когда страница действительно работает, - заголовок, цена или маркер в подвале, - а не по чему-то, что содержит и шаблон ошибки.
  3. Проверяйте и на отсутствие, и на присутствие. Поиск фраз вроде "на техобслуживании", "временно недоступен" или формулировки исключения вашего фреймворка ловит случай с дружелюбной страницей ошибки.
  4. Сравнивайте размер ответа с заведомо исправной базовой линией. Внезапный обвал длины тела обычно означает, что отрисовалась оболочка, а содержимое - нет.
  5. Проверяйте глубокую страницу, а не только главную. Главные страницы кэшируются интенсивнее всего и с наибольшей вероятностью продолжают отвечать 200, пока приложение за ними сломано.
  6. Повторяйте проверку из нескольких сетей. 200 из вашего офиса и ошибка с другого континента указывают на DNS, CDN или географическую маршрутизацию, а не на само приложение.

Что может пропустить зеленая проверка аптайма

Монитор, читающий только код состояния, будет показывать зеленый сайт на протяжении всего инцидента, начавшегося со страницы техработ, которую никто не убрал. Именно сочетание проверки статуса с проверкой ключевого слова и порогом времени отклика превращает "сервер ответил" в "страница работала". HostTracker предлагает 13 типов мониторов и оповещает по email, SMS, голосовым звонком, в Slack, Telegram и другими способами, так что несовпадение содержимого поднимает то же оповещение, что и сбой. Прогоните URL через инструмент HTTP-проверки, чтобы увидеть его статус, заголовки и время отклика, либо почитайте про семейство 2xx и 500 Internal Server Error про ответы, которые скрывает дружелюбная страница ошибки.

Проверить сейчас

Запустите бесплатную проверку своего сайта - аккаунт не нужен.

HTTP check

Следить за этим постоянно

Получайте оповещение в момент сбоя: HostTracker проверяет более чем из 300 локаций и уведомляет по email, SMS, в Slack, Telegram и не только.

Возможности HostTracker

Ещё в этом разделе: Коды состояния HTTP: разбор