Коды состояния HTTP: различие между превышением емкости и отключением для обслуживания

Код состояния HTTP 503 описан в rfc2616 как актуальный, когда сервер «в настоящее время не может обработать запрос из-за временной перегрузки или обслуживания сервера».

Бывают случаи, когда приложение может быть недоступно для обслуживания. Бывают случаи, когда приложение может быть перегружено.

В разрабатываемом мной серверном приложении я хотел бы иметь возможность различать эти два случая в ответе HTTP, чтобы клиентские приложения могли знать более точную причину недоступности службы.

После этого клиентские приложения могут отображать для пользователя либо уведомление о «превышении емкости», либо о «отключении для обслуживания», в зависимости от ситуации.

Я мог бы выбрать использование неопределенного кода состояния 5XX (например, 520), однако я бы предпочел использовать определенный стандартный подход, если он есть.

Существует ли определенный стандартный подход для различения в ответе HTTP между недоступностью из-за проблем с пропускной способностью и недоступностью из-за обслуживания?


person Jon Cram    schedule 15.03.2013    source источник


Ответы (3)


Если вы не хотите определять свой собственный код состояния, вы можете использовать 503 и установить различные пользовательские сообщения об ошибках, в зависимости от того, является ли он «избыточной емкостью» или «недоступен для обслуживания».

Вы также можете установить поле заголовка ответа Retry-After, например, если вы знаете, когда ваше обслуживание завершено и сервер находится в резервной копии.

Подробная информация о кодах состояния:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Подробная информация о поле заголовка Retry-After:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

person Terry    schedule 15.03.2013
comment
как насчет 410? 503 не кажется правильным ответом, поскольку он временный, а также означает отсутствие сервера, что может повлиять на рейтинг наших услуг для таких сборщиков информации, как Google Analytics. 410 означает, что ресурс существовал, но теперь его нет ... - person deadManN; 03.01.2018

Не используйте неопределенный код состояния, если только вы не готовы приступить к процессу его регистрации.

Кроме того, у вас есть вся полезная нагрузка для добавления дополнительной информации.

Наконец, http://greenbytes.de/tech/webdav/rfc6585.html#status-429.

person Julian Reschke    schedule 15.03.2013

Я думаю, что код состояния 410 Gone может быть правильным ответом, он указывает на то, что ресурс существовал раньше, но в настоящее время он недоступен и больше не будет доступен https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

10.4.11 410 Gone

Запрошенный ресурс больше не доступен на сервере, и адрес пересылки неизвестен. Ожидается, что это состояние будет считаться постоянным. Клиенты с возможностью редактирования ссылок ДОЛЖНЫ удалить ссылки на Request-URI после утверждения пользователем. Если сервер не знает или не имеет возможности определить, является ли условие постоянным, СЛЕДУЕТ использовать код состояния 404 (не найдено). Этот ответ кэшируется, если не указано иное.

Ответ 410 в первую очередь предназначен для поддержки задачи обслуживания сети путем уведомления получателя о том, что ресурс намеренно недоступен и что владельцы сервера желают, чтобы удаленные ссылки на этот ресурс были удалены. Такое событие характерно для ограниченных по времени рекламных услуг и для ресурсов, принадлежащих лицам, которые больше не работают на сайте сервера. Нет необходимости отмечать все постоянно недоступные ресурсы как пропавшие или сохранять отметку в течение какого-либо периода времени - это остается на усмотрение владельца сервера.

person deadManN    schedule 03.01.2018