Существует общее заблуждение (и неправильное использование), связанное с 403 Forbidden
: оно не должно ничего выдавать о том, что сервер думает о запросе. Это специально разработано, чтобы сказать,
Я получаю то, что вы запрашиваете, но я не собираюсь обрабатывать запрос, независимо от того, что вы пытаетесь. Так что перестань пытаться.
Любой UA или клиент должен интерпретировать это как означающее, что запрос никогда не будет работать, и отвечать соответствующим образом.
Это имеет значение для клиентов, обрабатывающих запросы от имени пользователей: если пользователь не вошел в систему или неправильно набрал номер, клиент, обрабатывающий запрос, должен ответить «Извините, но я ничего не могу сделать» после первого раза он получает 403
и перестает обрабатывать будущие запросы. Очевидно, что если вы хотите, чтобы пользователь по-прежнему мог запрашивать доступ к своей личной информации после сбоя, это поведение враждебно для пользователя.
403
в отличие от 401 Authorization Required
, что делает отдать , что сервер будет обрабатывать запрос до тех пор , как вы передаете правильные учетные данные. Об этом обычно думают люди, когда слышат 403
.
Это также противоречит тому, 404 Page Not Found
что, как отмечали другие, предназначено не только для того, чтобы сказать «я не могу найти эту страницу», но и для того, чтобы предложить клиенту, чтобы сервер не заявлял об успехе или неудаче для будущих запросов.
С помощью 401
и 404
, сервер ничего не говорит клиенту или агенту UA о том, как они должны действовать: они могут продолжать пытаться получить другой ответ.
Так 404
что это подходящий способ обработки страницы, которую вы не хотите показывать всем, но не хотите ничего рассказывать о том, почему вы не будете показывать ее в определенных ситуациях.
Конечно, это предполагает, что клиент, делающий запрос, заботится о мелком подделке RFC. Достаточно злонамеренный клиент не будет заботиться о возвращенном коде состояния, кроме как случайным образом. Кто-то узнает, что это скрытая пользовательская страница (или потенциальная скрытая пользовательская страница), если сравнить ее с другими известными пользовательскими страницами.
То есть, скажем, ваш обработчик users/*
. Если я знаю users/foo
, users/bar
и users/baaz
работа, сервер возвращая 401
, 403
или 404
для users/quux
не значит , что я не собираюсь попробовать, особенно если у меня есть основания полагать , что там естьquux
пользователь. Стандартным примером сценария является Facebook: мой профиль закрытый, а мои комментарии в общедоступных профилях - нет. Вредоносный клиент знает, что я существую, даже если вы вернетесь 404
на страницу моего профиля.
Таким образом, коды состояния предназначены не для случаев злонамеренного использования, а для клиентов, играющих по правилам. И для этих клиентов, 401
или 404
запрос является наиболее подходящим.