Правильное использование кодов ошибок HTTP. 550 - Почему 5xx вместо 4xx?

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

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

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

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

Спасибо!


person Bart Calixto    schedule 13.05.2013    source источник


Ответы (1)


Ошибки 5xx — это ошибки СЕРВЕРА. Если у пользователя нет разрешения, это должна быть ошибка 4XX.

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

Вы ищете ошибку 403 Forbidden.

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

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

403 Запрещено

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

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

person Thomas Clayson    schedule 13.05.2013