Вопрос по web-applications, http-status-codes, http-error – Правильное использование кодов ошибок HTTP. 550 - Почему это 5xx вместо 4xx?

6

Сегодня совместная работа использовала ошибку 550 в действии удаления, когда у пользователя нет разрешения, которое поначалу показалось мне плохим, потому что, как мне известно, эта ошибка мне напоминает ошибку клиента (aka 4xx) а не сервер (он же 5xx).

Глядя на описание, оно подсказывает, что оно использовалось правильно. Вместо ошибки 401, которую я использовал с некоторыми «проблемами» раньше.

Проблема с ошибкой 401: если пользователь A вошел в систему и попытался выполнить действие, которое возвращает 401, он может предложить вам войти в систему, поскольку у вас нет действительных учетных данных для доступа к этому ресурсу http. Проблема с этим подходом состоит в том, что, если пользователь вошел в систему, сервер знает, что у него нет разрешения, в данном случае выглядит как 550, это более уместно, но мне не кажется, что ошибка 550 должна использоваться в этом сценарий.

Вопрос в том, как правильно (если есть) использовать ошибку 550 в веб-приложениях. Я понимаю, что это используется в FTP и SMTP ретрансляции. Если какой-то пользователь вошел в систему, отправляет запрос о недопустимом действии, какая ошибка должна быть возвращена?

Спасибо!

Ваш Ответ

1   ответ
10

это должно быть ошибкой 4XX.

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

Ошибка, которую вы ищете403 Запрещено

Это не имеет никакой двусмысленности в отношении того, вошел ли пользователь в систему или нет. Его четкий срез.

Из вики на http коды ошибок (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes) (выделение мое):

403 Запрещено

Запрос был действительным, но сервер отказывается отвечать на него. [2] В отличие от несанкционированного ответа 401, аутентификация не имеет значения. [2] На серверах, где требуется аутентификация, это обычно означает, что предоставленные учетные данные были успешно аутентифицированыно учетные данные все еще не предоставляют клиенту разрешение на доступ к ресурсу (например, распознанный пользователь пытается получить доступ к ограниченному контенту).

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

Похожие вопросы