403 Prepovedano in 401 Nepooblaščeni odzivi HTTP

Kakšen je pravilen odziv HTTP za spletno stran, ki obstaja, vendar za katero uporabnik nima zadostnih pravic (ni prijavljen ali ne pripada ustrezni skupini uporabnikov)? 401? 403? Kaj drugega? Kar sem doslej prebral o vsakem od njih, ni povsem jasno glede razlike med njima. Kateri primeri uporabe so primerni za vsak odgovor?

Rešitev

Jasna razlaga Daniel Irvine:

Nekaj težav je z 401 Unauthorized, kodo stanja HTTP za napake pri avtentikaciji. In to je točno to: namenjena je avtentikaciji in ne avtorizaciji.

Če prejmete odgovor 401, vam strežnik sporoča: "niste avtentificirani - bodisi sploh niste avtentificirani bodisi ste avtentificirani nepravilno, vendar se ponovno potrdite in poskusite znova." V pomoč vam je, bo vedno vključil glavo WWW-Authenticate, ki opisuje, kako se je treba avtentificirati.

To je odgovor, ki ga običajno vrne vaš spletni strežnik in ne vaš spletni aplikacija.

To je tudi nekaj zelo začasnega; strežnik vas prosi, da poskusite znova.

Zato za avtorizacijo uporabljam odziv 403 Forbidden. To je trajen, povezan je z logiko moje aplikacije in je bolj konkreten. odziv kot 401.

Če prejmete odgovor 403, vam strežnik sporoča: "Žal mi je. Vem, da kdo ste - verjamem, kdo pravite, da ste - vendar preprosto nimate dovoljenja za dostop do tega vira. Mogoče, če sistem vprašate skrbnika lepo vprašate, boste dobili dovoljenje. Vendar vas prosim, da se ne trudite dokler se vaša situacija ne spremeni."

Če povzamemo, je treba odgovor 401 Unauthorized uporabiti za manjkajoče ali slabo avtentikacijo, odgovor 403 Forbidden pa je treba uporabiti pozneje, ko je uporabnik overjen, vendar ni pooblaščen za opraviti zahtevano operacijo na danem viru.

Še ena lepa slikovna oblika uporabe kod stanja http.

Komentarji (26)

Glej RFC2616:

401 Nepooblaščeno:

Če je zahteva že vsebovala poverilnice za avtorizacijo, potem odgovor 401 pomeni, da je bila avtorizacija za te poverilnice zavrnjena.

403 Prepovedano:

Strežnik je razumel zahtevo, vendar je ne želi izpolniti.

Posodobitev

Iz vašega primera uporabe je razvidno, da uporabnik ni overjen. Vrnil bi 401.


Uredi: RFC2616 je zastarel, glejte RFC7231 in RFC7235._

Komentarji (14)

V skladu s standardom RFC 2616 (HTTP/1.1) se 403 pošlje, ko:

Strežnik je razumel zahtevo, vendar je noče izpolniti. Avtorizacija ne bo pomagala, zato zahteve NE MORATE ponoviti. Če metoda zahteve ni bila HEAD in želi strežnik javno objaviti, zakaj zahteva ni bila izpolnjena, MORA v entiteti opisati razlog za zavrnitev. Če strežnik teh informacij ne želi dati na voljo odjemalcu, se lahko namesto tega uporabi statusna koda 404 (Ni najdeno).

Z drugimi besedami, če odjemalec lahko dobi dostop do vira z avtentikacijo, je treba poslati sporočilo 401.

Komentarji (7)