Esiste un malinteso generale (e un uso improprio) associato a 403 Forbidden
: non si deve dare nulla a ciò che il server pensa della richiesta. È specificamente progettato per dire,
I get what you're requesting, but I'm not going handle the request, no matter what you try. So stop trying.
Qualsiasi UA o client dovrebbe interpretare ciò per indicare che la richiesta mai funzionerà e rispondere in modo appropriato.
Questo ha implicazioni per i client che gestiscono le richieste per conto degli utenti: se un utente non ha effettuato l'accesso, o esegue l'oscuramento, il client che gestisce la richiesta dovrebbe rispondere, "Mi dispiace, ma non posso fare nulla" dopo la prima volta che ottiene 403
e smette di gestire le richieste future. Ovviamente, se si desidera che un utente sia ancora in grado di richiedere l'accesso alle proprie informazioni personali dopo un errore, si tratta di un comportamento ostile all'utente.
403
è in contrasto con 401 Authorization Required
, che fa comunica che il server gestirà la richiesta fino a quando si passeranno le credenziali corrette. Questo è solitamente ciò a cui pensa la gente quando sente 403
.
È anche in contrasto con 404 Page Not Found
che, come altri hanno sottolineato, è progettato non solo per dire "Non riesco a trovare quella pagina" ma per suggerire al client che il server non fa affermazioni di successo o fallimento per richieste future.
Con 401
e 404
, il server non dice nulla al client o alla UA su come dovrebbero procedere: possono continuare a provare nella speranza di ottenere una risposta diversa.
Quindi 404
è il modo appropriato per gestire una pagina che non vuoi mostrare a tutti, ma non vuoi rivelare nulla sul perché non lo mostrerai in determinate situazioni.
Ovviamente, questo presuppone che il cliente che fa la richiesta si preoccupi della meschina RFC flippancy. Un client abbastanza malizioso non si preoccuperà del codice di stato restituito se non in modo incidentale. Uno saprà che è una pagina utente nascosta (o una potenziale pagina utente nascosta) confrontandola con altre pagine utente conosciute.
Cioè, diciamo che il tuo gestore è users/*
. Se so che users/foo
, users/bar
e users/baaz
funzionano, il server che restituisce 401
, 403
o 404
per users/quux
non significa che non ho intenzione di provarlo, specialmente se ho ragione di credere che sia un quux
utente. Uno scenario di esempio standard è Facebook: il mio profilo è privato, ma i miei commenti sui profili pubblici non lo sono. Un client dannoso sa che esisto anche se restituisci 404
nella pagina del mio profilo.
Quindi i codici di stato non sono per i casi di utilizzo dannoso, sono per i clienti che giocano secondo le regole. E per quei clienti, una 401
o una 404
richiesta è più appropriata.