HTTP statusni kodovi
Uvod
Kada određeni računar (tj. 'klijent'), pošalje serveru zahtev za pristup određenoj web stranici (ili nekom drugom sadržaju), server prima zahtev, obrađuje zahtev i zatim, preko protokola HTTP, vraća klijentu odgovor koji između ostalog sadrži i trocifreni broj koji predstavlja statusni kod obrađenog zahteva.
Statusni kod označava na koji način je zahtev rešen, pri čemu prva cifra označava kategoriju odgovora, a preostale dve cifre dodatno određuju konkretan status.
U članku koji je pred nama, upoznaćemo se sa poznatijim statusnim kodovima koji se prosleđuju preko protokola HTTP.
Kako očitavati statusne kodove
Pre nego što se posvetimo značenju različitih statusa, ukratko ćemo razmotriti kako se HTTP statusi (uopšte) mogu očitavati.
Ukoliko je 'sve u redu', tipično nećemo videti 'statusni kod', već - traženi sadržaj (stranica će biti prikazana u browseru).
Ukoliko nije 'sve u redu', server će poslati statusni kod koji 'signalizira da je došlo do greške', nakon čega će (u većini situacija), statusni kod biti prikazan posetiocu sajta, direktno u browseru (umesto zahtevanih sadržaja).
U browserima je moguće pratiti statusne kodove direktno, preko web dev alata (o kojima smo već pisali) * ....
.... međutim, prava zanimljivost su specijalizovani softveri ** ....
.... koji prikazuju statusne kodove (i druge informacije 'tehničke prirode'), ali takođe omogućavaju i direktno zadavanje dodatnih parametara pri slanju HTTP zahteva (kao i obavljanje raznih drugih 'zahvata' (npr. moguće je direktno upućivati POST zahteve i sl)).
Vraćamo se na statusne kodove ....
2xx - Uspešno prihvaćeni zahtevi
Svi statusni kodovi iz grupe 2**
označavaju uspešno prihvaćene zahteve, međutim, samo prva dva statusa (u nastavku), označavaju ishode koji su 'skroz povoljni' (ukoliko imate želju da se bavite web programiranjem, preporučujemo da odmah zapamtite status 200
i njegovo značenje - trebaće vam). :)
200 - Status OK
Statusni kod 200
je deo odgovora servera u situacijama kada zahtev, ne samo da je uspešno prihvaćen, već je i uspešno rešen (nije bilo grešaka: ni u prijemu i obradi zahteva, ni u pronalaženju sadržaja).
Najprostije rečeno, u pitanju je status koji želimo da dobijemo svaki put kada se obratimo serveru zarad čitanja podataka (osim ako se ne bavimo određenim vidom testiranja, debugging-a i sl).
201 - Created (Sadržaj kreiran)
Statusni kod 201
označava da je zahtev za kreiranje novog sadržaja na serveru prihvaćen - i pri tom je sadržaj uspešno kreiran (tipičan primer: uspešno kreiranje novog korisničkog naloga preko forme za registraciju).
Kao što smo već nagovestili, ostali 2**
statusi označavaju situacije koje nisu 'kritične', ali su (ipak) nešto manje povoljne.
202 - Accepted (Zahtev prihvaćen)
Zahtev je prihvaćen, ali, nije rešen (obrada podataka, iz bilo kog razloga, nije obavljena u potpunosti).
204 - No content (Nema sadržaja)
Zahtev je prihvaćen i obrađen, ali nije vraćen nikakav sadržaj.
206 - Partial content (Sadržaj je vraćen delimično)
Zahtev je prihvaćen i obrađen, ali je sadržaj vraćen samo delimično (zbog veličine (tj. obima) paketa koji se šalju, zakrčenja mrežnog saobraćaja, ili iz drugih tehničkih razloga).
3xx - Preusmeravanje
Statusni kodovi iz kategorije 3**
, i dalje su prilično 'benigni' (ali ne i povoljni), * i odnose se na dodatne korake koji se preduzimaju zarad pristupa traženim sadržajima.
U praktičnom smislu, većina 3**
statusa se odnosi na redirekciju, i stoga ćemo se upoznati upravo sa dva najpoznatija (i najčešće korišćena) statusa iz kategorije 3**
.
301 - Moved permanently (Stranica je premeštena trajno)
Status 301
označava da je određena stranica premeštena na novu adresu (usled čega se i programi koji pristupaju stranici, preusmeravaju upravo - na novu adresu).
302 - Found (Stranica je premeštena privremeno)
Kao i u prethodnom slučaju, u pitanju je statusni kod koji se javlja u situacijama kada je stranica premeštena na novu adresu, s tim da (naravno/očekivano) postoji razlika u odnosu na status 301
.
Statusni kod 302
sugeriše pretraživačima (Google, Bing, DuckDuckGo i sl), da je stranica premeštena na drugu adresu samo privremeno.
U nastavku, upoznaćemo se sa statusnim kodovima iz kategorija 4**
i 5**
(pri čemu su u pitanju statusni kodovi koji označavaju greške u učitavanju traženih sadržaja (a ne samo "ne-baš-skroz-povoljne okolnosti")).
4xx - Greške na strani klijenta
Statusni kodovi iz kategorije 4**
upućuju na to da zahtev nije prihvaćen zbog zbog greške na strani klijenta.
400 - Bad request (Nepravilno formatiran zahtev)
Server nije u stanju da odgovori na zahtev klijenta (ili odbija da odgovori na zahtev klijenta), s obzirom na nepravilan format zahteva.
401 - Unauthorized (Pristup stranici je odbijen)
Statusni kod 401
označava da je pristup stranici, koja zahteva korisničko ime i lozinku, odbijen zbog neodgovarajućih podataka za autentifikaciju (pogrešna lozinka, kombinacija korisničkog imena i lozinke i sl).
403 - Forbidden (Pristup stranici je zabranjen)
Statusni kod 403
označava da je pristup stranici zabranjen, a razlika u odnosu na status 401
je sledeća: statusni kod 403
javlja se u situacijama kada klijent nema pravo pristupa ni pod kojim okolnostima, dok status 401
označava da klijent inače ima pravo pristupa, ali, pristup nije uspeo zbog nepravilno prosleđenih podataka.
Najčešće se statusni kod 403
javlja pri pokušaju klijenta da direktno pristupi direktorijumima i datotekama na serveru - pri čemu je pristup navedenim sadržajima zabranjen (preko podešavanja na serveru).
404 - Not found (Stranica nije pronađena)
Statusni kod 404
(za koji verujemo da je čitaocima sasvim dobro poznat iz svakodnevne prakse :)), označava neuspeli pokušaj pristupa stranici koja ne postoji na serveru.
Korisnici mogu ("za svoj račun") praviti razliku između sadržaja koji "opravdano" ne postoje, * i situacija kada se (na primer) koristi link koji je ranije bio funkcionalan, ali je stranica izbrisana ili pomerena (pri čemu nije u pitanju greška korisnika, tj. klijenta), međutim - server jednostavno 'konstatuje' da stranica ne postoji (bez ikakvog zalaženja u "istoriju i politiku").
Ostali 4**
statusi su manje uobičajeni (navešćemo samo nekoliko).
408 - Request timeout (Vreme isteklo)
Ukoliko klijent uspostavi vezu sa serverom i započne slanje zahteva, ali ne obavi slanje zahteva u celosti (za vreme koje je predviđeno za prijem zahteva), server vraća statusni kod 408
i prekida (privremeno) vezu sa klijentom.
Tipičan primer: iz tehničkih razloga, veza između klijenta i servera je privremeno u prekidu, ili je znatno usporena.
414 - URI too long (Adresa sadrži previše znakova)
Broj znakova u URI identifikatoru (tj. adresi), premašuje dozvoljenu granicu (što se povremeno dešava kada se preko protokola GET šalju niske znakova prevelike dužine).
429 - Too many requests (Preveliki broj zahteva)
Preveliki broj zahteva za uspostavljanje konekcije (koji su upućeni sa IP adrese klijenta).
5xx - Greške na strani servera
Statusni kodovi iz kategorije 5**
sadrže poruke koje su prouzrokovane greškom na strani servera.
500 - Internal server error (Interna greška servera)
Server neočekivano nije u mogućnosti da odgovori na zahtev klijenta, niti da pruži specifičnu informaciju o prirodi greške.
501 - Not implemented (Protokol nije implementiran)
Server ne prepoznaje protokol za pristup podacima.
503 - Service unavailable (Server nedostupan)
Server nije u stanju da odgovori zbog preopterećenosti ili je privremeno isključen zbog održavanja.
505 - HTTP version not supported (Verzija HTTP-a nije podržana)
Server ne prepoznaje verziju HTTP protokola koju klijent koristi pri pokušaju pristupa.
Kratak rezime ....
U ovom članku prikazali smo relativno mali broj statusnih kodova, međutim, naveli smo statusne kodove sa kojima se administratori servera tipično sreću u svakodnevnom radu (kao i nekoliko 'netipičnih' statusa), dok, sa druge strane, korisnici najčešće imaju susreta samo sa statusima 200
, 404
i, ređe, 403
ili 503
.
Ukoliko želite da dalje istražujete tematiku, brojni Internet sajtovi omogućiće vam uvid u bogatu dokumentaciju koja je vezana za HTTP statuse.