En supposant que l'authentification HTTP (en - têtes WWW-Authenticate et Authorization ) est en cours d'utilisation , si l'authentification en tant qu'un autre utilisateur autorise l'accès à la ressource demandée, alors 401 Unauthorized doit être renvoyé.
403 Interdit est utilisé lorsque l'accès à la ressource est interdit à tout le monde ou restreint à un réseau donné ou autorisé uniquement via SSL, tant qu'il n'est pas lié à l'authentification HTTP.
Si l'authentification HTTP n'est pas utilisée et que le service est un schéma d'authentification basé sur les cookies comme c'est la norme de nos jours, alors un 403 ou un 404 doit être retourné.
Concernant 401, cela provient de la RFC 7235 (Hypertext Transfer Protocol (HTTP / 1.1): Authentification):
3.1. 401 non autorisé
Le code d'état 401 (non autorisé) indique que la demande n'a pas été appliquée car il manque des informations d'identification d'authentification valides pour la ressource cible. Le serveur d'origine DOIT envoyer un champ d'en-tête WWW-Authenticate (section 4.4) contenant au moins un défi applicable à la ressource cible. Si la demande incluait des informations d'authentification, la réponse 401 indique que l'autorisation a été refusée pour ces informations.. Le client PEUT répéter la demande avec un champ d'en-tête d'autorisation nouveau ou remplacé (section 4.1). Si la réponse 401 contient le même défi que la réponse précédente, et l'agent utilisateur a déjà tenté l'authentification au moins une fois, alors l'agent utilisateur DEVRAIT présenter la représentation jointe à l'utilisateur, car elle contient généralement des informations de diagnostic pertinentes.
La sémantique de 403 (et 404) a changé au fil du temps. C'est de 1999 (RFC 2616):
10.4.4 403 Interdit
Le serveur a compris la demande, mais refuse de la satisfaire.
L'autorisation n'aidera pas et la demande NE DEVRAIT PAS être répétée.
Si la méthode de demande n'était pas HEAD et que le serveur souhaite rendre
public pourquoi la demande n'a pas été satisfaite, il DEVRAIT décrire la raison du refus dans l'entité. Si le serveur ne souhaite pas mettre ces informations à la disposition du client, le code d'état 404
(Not Found) peut être utilisé à la place.
En 2014, la RFC 7231 (Hypertext Transfer Protocol (HTTP / 1.1): sémantique et contenu) a changé la signification de 403:
6.5.3. 403 Interdit
Le code d'état 403 (interdit) indique que le serveur a compris la demande mais refuse de l'autoriser. Un serveur qui souhaite rendre public pourquoi la demande a été interdite peut décrire cette raison dans la charge utile de réponse (le cas échéant).
Si des informations d'authentification ont été fournies dans la demande, le
serveur les considère insuffisantes pour accorder l'accès. Le client
NE DEVRAIT PAS répéter automatiquement la demande avec les mêmes
informations d'identification. Le client PEUT répéter la demande avec des informations d'identification nouvelles ou différentes. Cependant, une demande peut être interdite pour des raisons
sans rapport avec les informations d'identification.
Un serveur d'origine qui souhaite "masquer" l'existence actuelle d'une
ressource cible interdite PEUT plutôt répondre avec un code d'état de
404 (introuvable).
Ainsi, un 403 (ou un 404) pourrait désormais signifier n'importe quoi. Fournir de nouvelles informations d'identification pourrait aider ... ou non.
Je crois que la raison pour laquelle cela a changé est que la RFC 2616 a supposé que l'authentification HTTP serait utilisée alors que dans la pratique, les applications Web d'aujourd'hui créent des schémas d'authentification personnalisés en utilisant par exemple des formulaires et des cookies.