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 403
oe 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.
403
está 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 Found
que, 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 401
e 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/bar
e users/baaz
trabalho, o servidor retornar um 401
, 403
ou 404
por users/quux
não significa que eu não vou experimentá-lo, especialmente se eu tenho razão para acreditar que não é um quux
usuá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 401
ou uma 404
solicitação é mais apropriada.