Supponendo che sia in uso l' autenticazione HTTP ( intestazioni WWW-Authenticate and Authorization ) , se l'autenticazione come un altro utente consentirebbe l'accesso alla risorsa richiesta, allora dovrebbe essere restituito 401 Non autorizzato.
403 Proibito viene utilizzato quando l'accesso alla risorsa è vietato a tutti o limitato a una determinata rete o consentito solo su SSL, a condizione che non sia correlato all'autenticazione HTTP.
Se l'autenticazione HTTP non è in uso e il servizio prevede uno schema di autenticazione basato su cookie come è oggigiorno la norma, è necessario restituire un 403 o un 404.
Per quanto riguarda 401, questo è da RFC 7235 (Hypertext Transfer Protocol (HTTP / 1.1): Autenticazione):
3.1. 401 Non autorizzato
Il codice di stato 401 (non autorizzato) indica che la richiesta non è stata applicata perché manca di credenziali di autenticazione valide per la risorsa di destinazione. Il server di origine DEVE inviare un campo di intestazione WWW-Authenticate (Sezione 4.4) contenente almeno una sfida applicabile alla risorsa di destinazione. Se la richiesta includeva credenziali di autenticazione, la risposta 401 indica che l'autorizzazione è stata rifiutata per tali credenziali. Il cliente può ripetere la richiesta con un campo di intestazione Autorizzazione nuovo o sostituito (Sezione 4.1). Se la risposta 401 contiene la stessa sfida della risposta precedente e l'agente utente ha già tentato l'autenticazione almeno una volta, l'agente utente DOVREBBE presentare all'utente la rappresentazione allegata, poiché di solito contiene informazioni diagnostiche pertinenti.
La semantica di 403 (e 404) è cambiata nel tempo. Questo è del 1999 (RFC 2616):
10.4.4 403 Proibito
Il server ha compreso la richiesta, ma si rifiuta di soddisfarla.
L'autorizzazione non sarà di aiuto e la richiesta NON DOVREBBE essere ripetuta.
Se il metodo di richiesta non era HEAD e il server desidera rendere
pubblico il motivo per cui la richiesta non è stata soddisfatta, DOVREBBE descrivere il motivo del rifiuto nell'entità. Se il server non desidera rendere disponibili queste informazioni al client, è
possibile utilizzare invece il codice di stato 404 (Not Found).
Nel 2014 RFC 7231 (Hypertext Transfer Protocol (HTTP / 1.1): Semantica e contenuto) ha cambiato il significato di 403:
6.5.3. 403 proibito
Il codice di stato 403 (proibito) indica che il server ha compreso la richiesta ma si rifiuta di autorizzarla. Un server che desidera rendere pubblico il motivo per cui la richiesta è stata vietata può descrivere tale motivo nel payload di risposta (se presente).
Se nella richiesta sono state fornite credenziali di autenticazione, il
server le considera insufficienti per consentire l'accesso. Il client
NON DOVREBBE ripetere automaticamente la richiesta con le stesse
credenziali. Il cliente può ripetere la richiesta con credenziali nuove o diverse. Tuttavia, una richiesta potrebbe essere vietata per motivi
non correlati alle credenziali.
Un server di origine che desidera "nascondere" l'esistenza attuale di una
risorsa di destinazione vietata PU instead invece rispondere con un codice di stato
404 (non trovato).
Pertanto, un 403 (o un 404) potrebbe ora significare qualsiasi cosa. Fornire nuove credenziali potrebbe aiutare ... oppure no.
Credo che il motivo per cui questo è cambiato sia RFC 2616 supponendo che l'autenticazione HTTP verrebbe utilizzata quando in pratica le app Web di oggi sviluppano schemi di autenticazione personalizzati utilizzando ad esempio moduli e cookie.