HTTP Statusni kodovi

Pregled sadržaja

Statusni kodovi od iznimne su važnosti za developere, ponekad za korisnike kada im se informacija o grešci prikaže na ekrane a značajni su za računalne botove koje su u službi tražilica jer oni na temelju statusnih kodova provjeravaju zdravlje web stranica.

Što su statusni kodovi?

HTTP statusni kod je poruka koju server (poslužitelj) šalje pregledniku (klijentu) na svaki zahtjev za prikaz stranice. Omogućuju nam točan uvid u radnje koje se odvijaju između preglednika i servera.

Svaki put kada kliknemo na link ili u adresnu traku upišemo URL neke stranice i pritisnemo tipku Enter, naš preglednik šalje zahtjev serveru na kojoj se nalaze web stranice kako bi mu mogli pristupiti. Server prima i obrađuje taj zahtjev, a zatim nam natrag šalje sve bitne resurse zajedno s HTTP zaglavljem.

Gdje vidimo statusne kodove

Iako statusne kodove naš preglednik zaprimi svaki put kad preglednik zatraži web stranicu ili neki drugi resurs, većinu vremena ih uopće ne vidimo. Vidimo ih jedino kada nešto pođe po zlu i tada nam se u pregledniku pojavi poruka o greški.

Da bi ih vidjeli možemo koristiti neke alate. Primjerice, ekstenzija Web Sniffer za Chrome nakon što ju instaliramo i otvorimo, u posebnom tabu preglednika prikazat će za svaku web stranicu koju zatražimo pregled svih zahtjeva, njihove statusne kodove, koji tip resursa (slika, skripta, stilovi…), koji je tip protokola (GET, POST…) bio potreban da se učita.

Slično možemo postići s raznim programima, primjerice crawler Screaming Frog kojeg koristimo za SEO analizu web stranica nam može pružati još puno više detaljnih informacija.

Generalno statusni kodovi mogu biti od velike vrijednosti za razumijevanje što se točno događa developerima koji izrađuju web stranice. Neprocjenjiv su alat za dijagnosticiranje i ispravljanje pogrešaka u konfiguraciji web stranica. Danas ih podržavaju svi moderni preglednici.

Lista statusnih kodova

Postoji velik broj raznih statusnih kodova a dijele se na pet glavnih kategorija. Svaka kategorija ima srodna značenja i svaki pojedinačni kôd ima jedinstveno značenje. Pogledajmo koja su to.

1xx – informativni kodovi

Informativni kodovi izdaju se privremeno a obavijest nalaže klijentu da pričeka s konačnim odgovorom i obrada zahtjeva se potom nastavlja.

100 (Continue)
Poslužitelj odgovara da je zaprimio zahtjev i preglednik može nastaviti slati zahtjev ili ignorirati ako je zahtjev bio ispunjen. Na kraju sve će poslužitelj poslati završni odgovor.
101 (Switching Protocols)
Poslužitelj prihvaća zahtjev za izmjenu protokola kojeg predlaže preglednik.
102 (Processing)
Poslužitelj još obrađuje zahtjev a zahtjev traje duže nego inače te ga nije još u potpunosti obradio. Često se radi o razdoblju dužim od 20 sekundi a poslužitelj će poslati završni odgovor kada ispuni zahtjev.
103 (Early Hints)
Pomaže klijentu u pripremi savjetima za obradu konačnog odgovora.

2xx – kodovi uspješnosti

Kodovi uspješnosti informiraju klijenta da je njegov zahtjev zaprimljen, razumijet i prihvaćen.

200 (OK)
Uobičajeni potvrdni odgovor servera na ispravan zahtjev klijenta.
201 (Created)
Zahtjev je uspješno zaprimljen i kreiran je novi resurs na serveru.
202 (Accepted)
Zahtjev je zaprimljen, premda nije još do kraja proveden.
203 (Non-Authoritative Information)
Zahtjev je bio uspješan, ali vraća modificiranu informaciju.
204 (No Content)
Zahtjev je prihvaćen ali je traženi resurs prazan, bez sadržaja.
205 (Reset Content)
Zahtjev je obrađen a klijent mora osjvežiti prikaz na ekranu.
206 (Partial Content)
Zahtjev je uspješno zaprimljen ali je djelomično obrađen i prekinut.
207 (Multi-Status)
Tijekom obrade generirani su razni statusni kodovi, ovisno o tome koliko je podzahtjeva upućeno. Odgovor može sadržavati 2xx, 3xx, 4xx i 5xx statusne kodove (izuzev 1xx).

3xx – kodovi redirekcija

Kodovi redirekcije informiraju klijenta da je potrebno izvršiti dodatnu akciju da se izvrši zahtjev. Preglednik može samostalno izvršiti radnju bez dodatne interakcije korisnika.

300 (Multiple Choices)
Zatraženi zahtjev je nejasan, resurs ima više opcija i potrebno je preciznije navesti koji se treba dohvatiti. Primjerice, postoji nekoliko formata videozapisa.
301 (Moved Permanently)
Lokacija je trajno preseljena na novu adresu i klijent ubuduće treba koristiti tu novu adresu za pristup resursu.
302 (Found)
Resurs je pronađen.
303 (See Other)
Resurs se nalazi na drugoj lokaciji kojoj se treba pristupiti putem GET naredbe koja je navedena.
304 (Not Modified )
Resurs nije promijenjen od zadnjeg zahtjeva, prikazuje se sadržaj lokalne memorije (cache) i zbog toga se ne treba preuzeti sa servera.
305 (Use Proxy)
Upotrijebi proxy - resurs je dostupan samo preko proxyja koji je naveden u zaglavlju.
306 (Switch Proxy)
Ovaj statusni kôd nije u upotrebi već se čuva za buduće potrebe.
307 (Temporary Redirect )
Resurs je privremeno prebačen na drugu adresu a klijent treba i dalje koristiti originalnu adresu jer se ona opet može promijeniti.
308 (Permanent Redirect)
Slično kao 301, lokacija je trajno preseljena na novu adresu, jedino ne dopušta mijenjanje metode POST zahtjeva u GET, što je slučaj kod 301.

4xx – greške klijenata

4xx statusni kodovi koriste se za situacije kada je greška na strani klijenta. Možda je upisana kriva adresa ili postoji problem s preglednikom ili internetskom vezom.

400 (Bad Request)
Zahtjev sadrži netočnu sintaksu i server ju ne može razumijeti.
401 (Unauthorized )
Radnja nije dopuštena jer klijent nije ovlašten (korisničkim imenom, lozinkom ili drugim).
402 (Payment Required)
Za buduće potrebe.
403 (Forbidden)
Server razumije zahtjev ali ga odbija izvršiti. Postoji više mogućih razloga: direktorij nema indeksnu (glavnu) stranicu (index.php ili index.html), pristup je onemogućen zbog krive lozinke, pristup je zabranjen za vašu IP adresu itd.
404 (Not Found)
Resurs ne postoji na traženoj adresi te ga poslužitelj ne može pronaći. Često je resurs obrisan ili mu je promijenjena adresa. Jedan je od najčešćih statusnih kodova.
405 (Method Not Allowed)
Metoda koja je navedena u zahtjevu nije dopuštena za traženi resurs,
406 (Not Acceptable)
Zahtjev nije prihvatljiv.
408 (Request Timeout)
Vrijeme za obradu zahtjeva je isteklo.
409 (Conflict)
Postoji konflikt zbog koje nije mogući pristup traženom resursu.
410 (Gone)
Traženi resurs nije više dostupan na serveru, obrisan je a nema preusmjeravanja na novu lokaciju.
411 (Length Required)
U zahtjevu nije navedena duljina sadržaja koji traži poslužitelj da bi pristupio traženom resursu.
412 (Precondition Failed)
Poslužitelj ne ispunjava jedan od preduvjeta koje je klijent stavio u zaglavlje zahtjeva.
413 (Payload Too Large)
Zahtjev je predugačak.
414 (URI Too Long)
URL koji se traži je predugačak.
415 (Unsupported Media Type)
Server ne podržava traženi tip resursa.
416 (Range Not Satisfiable)
Klijent je zatražio dio datoteke ali poslužitelj ne može isporučiti taj dio.
421 (Misdirected Request )
Poslužitelj koji nije u stanju odgovoriti jer nije konfiguriran da daje odgovore na takve zahtjeve.
422 (Unprocessable Entity)
Zahtjev je dobro oblikovan i poslužitelj ga razumije ali ne može obraditi zbog semantičkih pogrešaka. Može se dogoditi kada je tijelo XML datoteke dobro strukturirano ali sadrže semantičke pogreške.
424 (Failed Dependency)
Zahtjev se ne može izvršiti jer ovisi o drugoj radnji koja prethodno nije uspjela.
426 (Upgrade Required)
Poslužitelj odbija izvršiti zahtjev koristeći trenutni protokol, ali možda će to biti voljan nakon nadogradnje klijenta na drugi protokol.
429 (Too Many Requests)
Klijent je uputio previše zahtjeva u određenom vremenskom razdoblju.
431 (Request Header Fields Too Large)
Poslužitelj ne želi obraditi zahtjev jer je pojedinačno polje ili su sva polja zaglavlja prevelika.
451 (Unavailable For Legal Reasons)
Poslužitelj uskraćuje pristup resursu zbog pravnog razloga.

5xx – greške poslužitelja

5xx statusni kodovi šalju obavijest da je server razumio zahtjev ali se dogodilo greška s njegove strane te on nije u mogućnosti iz nekog razloga izvršiti zahtjev.

500 (Internal Server Error)
Zatjev nije mogu biti uspješno proveden zbog greške na serveru. Najčešće se radi o pogrešci u PHP skripti a greška može biti i samo u jednom krivom znaku ili njegovom izostanku. Za više informacije potrebno je pogledati logove web servera.
501 (Not Implemented)
Zahtjev nije mogao biti obrađen jer server ne podržava funkcionalnost koja je tražena. Može se dogoditi na zastarjelim poslužiteljima.
502 (Bad Gateway)
Server javlja da je zaprimio nepoznati ili nevažeći odgovor od nadređenog servera kada je pokušavao obraditi zahtjev.
503 (Service Unavailable)
Server je zagušen zahtjevima i ne može ih obraditi u određenom vremenu ili je zauzet održavanjem. Obično se radi o privremenom opterećenju.
504 (Gateway Timeout)
Nadređeni server nije poslao zahtjev u određenom vremenu.
505 (HTTP Version Not Supported)
Server ne podržava ili ne dopuštea upotrebu traženog HTTP protokola, a u odgovoru navodi koje protokole podržava.
507 (Insufficient Storage)
Poslužitelj nije u mogućnosti pohraniti podatke potrebne za uspješno dovršavanje zahtjeva.
508 (Loop Detected)
Poslužitelj je otkrio beskonačnu petlju tijekom obrade zahtjev.
511 (Network Authentication Required )
Klijent se mora prijaviti da bi dobio pristup mreži.

 

Napomena: Microsoft serveri IIS (Internet Information Services7.0 i kasnije verzije koriste i dodatne kôdove HTTP statusa kako bi još detaljnije specificirale 4xx i 5xx greške.

Sažetak

Vidjeli smo pregled različitih HTTP statusnih kodova, kao i njihove kratke opise. Iako mogu izgledati komplicirano, vrlo su informativni i razumijevanje njihovih značenja je važno za izradu i kvalitetno održavanje web stranica.