Supondo que a autenticação HTTP ( cabeçalhos WWW-Authenticate and Authorization ) esteja em uso , se a autenticação como outro usuário conceder acesso ao recurso solicitado, 401 401 não autorizado deve ser retornado.
403 Proibido é usado quando o acesso ao recurso é proibido a todos ou restrito a uma determinada rede ou permitido apenas por SSL, desde que não relacionado à autenticação HTTP.
Se a autenticação HTTP não estiver em uso e o serviço for um esquema de autenticação baseado em cookie, como é a norma atualmente, um 403 ou 404 deve ser retornado.
Em relação ao 401, este é do RFC 7235 (Protocolo de Transferência de Hipertexto (HTTP / 1.1): Autenticação):
3.1 401 não autorizado
O código de status 401 (não autorizado) indica que a solicitação não foi aplicada porque não possui credenciais de autenticação válidas para o recurso de destino. O servidor de origem DEVE enviar um campo de cabeçalho WWW-Authenticate (Seção 4.4) contendo pelo menos um desafio aplicável ao recurso de destino. Se a solicitação incluir credenciais de autenticação, a resposta 401 indicará que a autorização foi recusada para essas credenciais. O cliente PODE repetir o pedido com um campo de cabeçalho de Autorização novo ou substituído (Seção 4.1). Se a resposta 401 contém o mesmo desafio que a resposta anterior, e o agente do usuário já tentou a autenticação pelo menos uma vez, o agente do usuário DEVE apresentar a representação em anexo ao usuário, pois geralmente contém informações de diagnóstico relevantes.
A semântica de 403 (e 404) mudou ao longo do tempo. Isso é de 1999 (RFC 2616):
10.4.4 403 Proibido
O servidor entendeu a solicitação, mas está se recusando a atendê-la.
A autorização não ajudará e a solicitação NÃO DEVE ser repetida.
Se o método de solicitação não foi HEAD e o servidor deseja tornar
público o motivo pelo qual a solicitação não foi atendida, DEVE descrever o motivo da recusa na entidade. Se o servidor não desejar disponibilizar essas informações ao cliente, o código de status 404
(Não encontrado) poderá ser usado.
Em 2014, o RFC 7231 (Protocolo de transferência de hipertexto (HTTP / 1.1): Semântica e conteúdo) mudou o significado de 403:
6.5.3 403 Proibido
O código de status 403 (Proibido) indica que o servidor entendeu a solicitação, mas se recusa a autorizá-la. Um servidor que deseja tornar público o motivo pelo qual a solicitação foi proibida pode descrever esse motivo na carga útil da resposta (se houver).
Se credenciais de autenticação foram fornecidas na solicitação, o
servidor as considera insuficientes para conceder acesso. O cliente
não deve repetir automaticamente o pedido com as mesmas
credenciais. O cliente pode repetir o pedido com credenciais novas ou diferentes. No entanto, uma solicitação pode ser proibida por motivos
não relacionados às credenciais.
Um servidor de origem que deseja "ocultar" a existência atual de um
recurso de destino proibido PODE responder com um código de status
404 (Não encontrado).
Assim, um 403 (ou um 404) agora pode significar qualquer coisa. O fornecimento de novas credenciais pode ajudar ... ou não.
Acredito que a razão pela qual isso mudou foi o RFC 2616, assumido que a autenticação HTTP seria usada quando, na prática, os aplicativos Web de hoje criam esquemas de autenticação personalizados usando, por exemplo, formulários e cookies.