Допустимо ли изменять текст, отправленный с кодом состояния HTTP?

Я внедряю «тестовый режим» на своем веб-сайте, который запрещает доступ к определенным страницам, пока они находятся в стадии разработки, делая их доступными только для администраторов для частного тестирования. Я планировал использовать код состояния 401, так как страница действительно существует, но им не разрешено ее использовать, и они могут или не могут быть аутентифицированы, но только определенные пользователи (в основном я) по-прежнему будут разрешить доступ к странице.

Мне интересно, имел ли значение текст после части HTTP/1.1 401? Должен ли он быть Unauthorized или это может быть все, что вы хотите поставить после него, если 401 все еще подходит для ошибки? Я хотел отправить сообщение типа Temporarily Unavailable, чтобы указать, что страница обычно доступна для всех посетителей, но находится на реконструкции и временно недоступна. Должен ли я делать это или нет?


person animuson    schedule 12.11.2011    source источник
comment
Вы можете изменить этот текст, но большинство пользователей его не увидят. Графические браузеры будут отображать HTML в теле ответа, а не код причины в первой строке заголовка HTTP-ответа. Таким образом, ваше изменение будет иметь значение только тогда, когда вы тестируете сервер с чем-то вроде curl --head или telnet.   -  person Joe White    schedule 12.11.2011
comment
В этом случае я бы предпочел использовать 503: stackoverflow.com/a/1701622/39321   -  person Svish    schedule 25.04.2013
comment
Я думал о 403, но на самом деле 503 более правильный. 401 означает: вы можете получить доступ к ресурсу, если вы предоставили правильные учетные данные. Например, отсутствует пароль или какой-либо токен безопасности. Поскольку пароль не поможет, 401 не подходит. Google для ошибки 401, ошибки 403 и ошибки 503 для объяснения.   -  person gnasher729    schedule 19.02.2014


Ответы (3)


Вы можете изменить их.

Сообщения о состоянии (технически называемые «обоснованными фразами») являются только рекомендациями и «МОГУТ быть изменены, не затрагивая протокол)».

См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1.1

Тем не менее, вы ДОЛЖНЫ :-) по-прежнему правильно использовать коды и давать осмысленные сообщения. Используйте 401 только в том случае, если ваше состояние соответствует требованиям RFC.

person Ray Toal    schedule 12.11.2011
comment
В частности, 401 не является правильным статусом для временной недоступности. - person Julian Reschke; 12.11.2011
comment
503 Сервис недоступен, как и общая ссылка :-/ она не работает. - person vhbazan; 07.05.2020
comment
Ошибка 503 — это временное состояние, которое сервер возвращает, когда он перегружен, проходит техническое обслуживание или что-то в этом роде. Ссылка, кстати, работает нормально. Вы просто попали на этот сервер, когда он был недоступен (вам повезло, хе-хе). Но да, хорошая мысль! Если вы увидели сообщение о состоянии Служба недоступна, значит, этот сервер отправил вам осмысленное сообщение об ошибке. Однако, если бы он отправил вам слово «сломанный», я бы сказал, что это не имело бы смысла, поскольку «сломанный» охватывает слишком много возможных условий. - person Ray Toal; 07.05.2020

Да, фразу причины можно изменить. Это не влияет на смысл сообщения.

Но если вам нужно сказать «временно недоступен», вам нужно сделать это 5xx (серверным) кодом. 503 кажется правильным здесь (см. RFC 2616, раздел 10.5.4).

person Julian Reschke    schedule 12.11.2011

Вы МОЖЕТЕ изменить текст (очень немногие http-клиенты обращают на это внимание), но лучше использовать наиболее подходящий код ответа. В конце концов, указание причины сбоя заключается в том, как предполагалось использовать различные коды ответов.

Возможно, это подходит:

404 Not Found Запрошенный ресурс не может быть найден, но может быть снова доступен в будущем.[2] Последующие запросы от клиента допустимы.

person Raymond Hettinger    schedule 12.11.2011
comment
Сначала я думал о 403, но аутентификация решит проблему в случае с администраторами, так как она только временная, где в статусе 403 указано, что the request SHOULD NOT be repeated. Я чувствую, что это означает, что это никогда не должно повторяться. Нет? - person animuson; 12.11.2011
comment
Тогда вы должны пойти с: 404 Not Found Запрошенный ресурс не может быть найден, но может быть снова доступен в будущем.[2] Последующие запросы от клиента допустимы. - person Raymond Hettinger; 12.11.2011