Existe um equívoco geral (e uso indevido) associado 403 Forbidden: ele não deve revelar nada sobre o que o servidor pensa sobre a solicitação. Foi projetado especificamente para dizer,
Eu recebo o que você está solicitando, mas não vou lidar com a solicitação, não importa o que você tente. Então pare de tentar.
Qualquer UA ou cliente deve interpretar isso para significar que a solicitação nunca funcionará e responder adequadamente.
Isso tem implicações para os clientes que manipulam solicitações em nome dos usuários: se um usuário não estiver logado ou digitar errado, o cliente que manipula a solicitação deverá responder: "Sinto muito, mas não posso fazer nada" depois da primeira vez. ele obtém 403oe deixa de manipular solicitações futuras. Obviamente, se você deseja que um usuário ainda possa solicitar acesso a suas informações pessoais após uma falha, esse é um comportamento hostil ao usuário.
403está em contraste com 401 Authorization Required, que não dar que o servidor irá processar o pedido, desde que você passar as credenciais corretas. Geralmente é isso que as pessoas pensam quando ouvem 403.
Também está em contraste com o 404 Page Not Foundque, como outros apontaram, foi projetado não apenas para dizer "Não consigo encontrar essa página", mas para sugerir ao cliente que o servidor não faz reivindicações de sucesso ou fracasso para solicitações futuras.
Com 401e 404, o servidor não diz nada ao cliente ou ao UA sobre como eles devem proceder: eles podem continuar tentando na esperança de obter uma resposta diferente.
Assim 404é a maneira apropriada de lidar com uma página que você não deseja mostrar a todos, mas não quer revelar nada sobre o motivo de não mostrá-la em determinadas situações.
Obviamente, isso pressupõe que o cliente que faz a solicitação se preocupe com a mesquinha mesquinha RFC. Um cliente mal-intencionado não se preocupa com o código de status retornado, exceto de maneira incidental. Alguém saberá que é uma página de usuário oculta (ou uma possível página de usuário oculta) comparando-a com outras páginas de usuário conhecidas.
Ou seja, digamos que seu manipulador seja users/*. Se eu sei users/foo, users/bare users/baaztrabalho, o servidor retornar um 401, 403ou 404por users/quuxnão significa que eu não vou experimentá-lo, especialmente se eu tenho razão para acreditar que não é um quuxusuário. Um cenário de exemplo padrão é o Facebook: meu perfil é privado, mas meus comentários em perfis públicos não. Um cliente mal-intencionado sabe que eu existo, mesmo que você retorne 404à minha página de perfil.
Portanto, os códigos de status não são para casos de uso mal-intencionados, são para os clientes que seguem as regras. E para esses clientes, uma 401ou uma 404solicitação é mais apropriada.