Существует общее заблуждение (и неправильное использование), связанное с 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запрос является наиболее подходящим.