Недавно я начал разрабатывать Java EE-приложения, и я пытаюсь понять больше о кодах состояния HTTP и когда их следует использовать.
Один случай, который у меня есть, - это когда пользователь входит в систему и хочет проверить статус заказа. Требование состоит в том, что пользователь не может проверить статус заказа, который им не принадлежит.
URL для проверки заказа, например:
mysite.com/order/status?id=22594
Сервлет, который обрабатывает этот запрос, будет проверять параметр ID, а также отключить и получить заказ из базы данных.
Если пользователь вводит идентификатор заказа, который они не отправили, было бы целесообразным вернуть 403 или ответить не на заказ?
В вашей типичной ситуации я могу думать о следующих случаях использования:
Идентификатор заказа не найден
Идентификатор заказа принадлежит кому-то другому.
Пользователь не зарегистрирован
от w3.org :
Сервер понял запрос, но отказывается его выполнять. Авторизация не поможет, и запрос НЕ ДОЛЖЕН повториться. Если метод запроса не был HEAD, и сервер хочет сообщить, почему запрос не был выполнен, ему ДОЛЖЕН описать причину отказа в сущности. Если сервер не хочет предоставлять эту информацию клиенту, вместо этого может использоваться код состояния 404 (Not Found).
в вашем случае, по соображениям безопасности, может быть хорошей идеей показать, что порядок не найден, но в целом ответ составляет 403
Если пользователь не отправил заказ или если заказ не принадлежит пользователю, тогда его необходимо вернуть любой из нижеприведенных ответов:
С точки зрения безопасности лучше вернуть 404.
Я бы склонялся к возврату HTTP 404
для идентификатора заказа, который пользователь не отправил (отсутствует или нет, его порядок). Примером здесь является то, что пользователю разрешен доступ к странице /order/status
но не указан конкретный идентификатор заказа.
Я возвращаю HTTP 403
в случае неправильного идентификатора заказа, который отправляет неправильное сообщение пользователю (здесь вы не можете его использовать).
Независимо от того, какой заказ не существует или заказ не принадлежит аутентифицированному пользователю; ошибка должна быть одинаковой или вы рискуете "утечкой" информации о заказах в вашей системе.