Какой подходящий код ошибки HTTP, если пользователь пытается выполнить действие, недоступное для него


У меня проблема с ответом HTTP-кода.

Пример использования:
Пользователь вместе с пользователем пытается изменить запись, которая доступна для редактирования только пользователям с правами модератора (в соответствии с бизнес-логикой).

Какой ожидается ответ HTTP-статуса?

Я уверен, что нижеприведенные статусы ошибочны.

  • 200 неверно, потому что действие не увенчалось успехом
  • 400 кажется неправильным, потому что все части запроса верны (тело / заголовки / метод)

Я рассматриваю 401 Unauthorized или 403 Forbidden, но у меня нет аргументов, которые можно было бы применить.

Какого статуса вы ожидаете?


person Liniel    schedule 25.11.2019    source источник


Ответы (2)


Я рассматриваю 401 Unauthorized или 403 Forbidden, но у меня нет аргументов, которые можно было бы применить.

Код состояния 403 кажется подходящим для ситуации, описанной в вашем вопрос. Однако, если сервер хочет «скрыть» существование ресурса, тогда 404 можно использовать вместо этого. См. Следующую цитату из RFC 7231:

6.5.3. 403 Запрещено

Код состояния 403 (Запрещен) указывает, что сервер понял запрос, но отказывается его авторизовать. Сервер, который желает сделать общедоступным, почему запрос был запрещен, может описать эту причину в полезных данных ответа (если таковые имеются).

Если в запросе были указаны учетные данные для аутентификации, сервер считает их недостаточными для предоставления доступа. Клиенту НЕ СЛЕДУЕТ автоматически повторять запрос с теми же учетными данными. Клиент МОЖЕТ повторить запрос с новыми или другими учетными данными. Однако запрос может быть запрещен по причинам, не связанным с учетными данными.

Исходный сервер, который желает «скрыть» текущее существование запрещенного целевого ресурса, МОЖЕТ вместо этого ответить кодом состояния 404 (не найден).

Код состояния 401 предназначен для использования HTTP-аутентификация (где учетные данные отправляются в _ 8_ header), чтобы указать, что учетные данные были отклонены для этого запроса.

person cassiomolin    schedule 25.11.2019
comment
Спасибо, что указали на этот источник. Я совсем об этом забываю. Большое спасибо! - person Liniel; 27.11.2019

Я ожидал бы 403. 401 обычно используется для сбоев входа в систему и тому подобного, 403 для попытки сделать что-то, что вам не разрешено делать после входа в систему.

person jwenting    schedule 25.11.2019