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

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

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

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

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

Спасибо!

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

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

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

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

Из вики на http коды ошибок ([http://en.wikipedia.org/wiki/List\_of\_HTTP\_status\_codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)) (выделение мое):

**403 Запрещено**

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

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