Aká je správna odpoveď HTTP pre existujúcu webovú stránku, pre ktorú používateľ nemá dostatočné oprávnenia (nie je prihlásený alebo nepatrí do správnej skupiny používateľov)? 401? 403? Niečo iné? To, čo som doteraz o každej z nich čítal, nie je veľmi jasné, aký je medzi nimi rozdiel. Aké prípady použitia sú vhodné pre každú odpoveď?
Jasné vysvetlenie od Daniela Irvina:
Je tu problém s 401 Unauthorized, stavovým kódom HTTP pre chyby autentifikácie. A to je práve to: je určený pre autentifikáciu, nie pre autorizáciu.
Prijatie odpovede 401 znamená, že server vám hovorí: "Nie ste overený - buď nie ste overený vôbec, alebo ste overený nesprávne, ale prosím, overte sa znova a skúste to znova." Aby sme vám pomohli, bude vždy obsahovať hlavičku WWW-Authenticate, ktorá opisuje, ako overiť.
Túto odpoveď zvyčajne vracia webový server, nie váš web aplikácia.
Je to tiež niečo veľmi dočasné; server vás žiada, aby ste sa pokúsili znova.
Takže na autorizáciu používam odpoveď 403 Forbidden. Je to trvalá, je viazaná na logiku mojej aplikácie a je to konkrétnejšia odpoveď ako 401.
Prijatie odpovede 403 znamená, že vám server hovorí: "Je mi ľúto. Viem, že kto ste - verím tomu, kto hovoríte, že ste - ale jednoducho nemáte povolenie na prístup k tomuto zdroju. Možno, že ak sa systému spýtate administrátora pekne, povolenie dostanete. Ale prosím, neobťažujte ma znova, kým sa vaša situácia nezmení."
Ak to zhrnieme, odpoveď 401 Unauthorized by sa mala použiť v prípade chýbajúceho alebo zlé overenie a odpoveď 403 Forbidden by sa mala použiť potom, keď je používateľ overený, ale nie je oprávnený vykonať požadovanú operáciu na danom zdroji.
Ďalší pekný obrázkový formát, ako by sa mali používať stavové kódy http.
Pozri RFC2616:
401 Neautorizované:
Ak žiadosť už obsahovala autorizačné poverenia, potom odpoveď 401 znamená, že autorizácia bola pre tieto poverenia zamietnutá.
403 Forbidden:
Server porozumel požiadavke, ale odmieta ju splniť.
Aktualizácia
Z vášho prípadu použitia vyplýva, že používateľ nie je overený. Vrátil by som 401.
Podľa RFC 2616 (HTTP/1.1) sa 403 odošle, keď:
Server porozumel požiadavke, ale odmieta ju splniť. Autorizácia nepomôže a požiadavka sa NESMIE opakovať. Ak spôsob požiadavky nebol HEAD a server chce zverejniť, prečo požiadavka nebola splnená, MUSÍ v entite opísať dôvod odmietnutia. Ak si server neželá sprístupniť túto informáciu klientovi, môže sa namiesto toho použiť stavový kód 404 (Not Found)
Inými slovami, ak klient MÔŽE získať prístup k prostriedku overením, mal by sa poslať kód 401.