HTTP protokol: zahtevi, odgovori i statusni kodovi
HTTP je „jezik“ kojim pregledač i server razgovaraju. Svaki zahtev i svaki odgovor imaju isti oblik: početni red, zaglavlja i (ponekad) telo. Kada ga razumeš, lako pratiš šta radi bilo koja web aplikacija – i brzo nalaziš greške.
Kako da učiš: svaki primer isprobaj u pregledaču ili komandnoj liniji i uradi vežbe iz lekcije. Primeri su u HTML-u, JavaScript-u i Python-u; za većinu je dovoljan pregledač, a za Python primere instaliran Python 3.
Kako izgleda HTTP zahtev
GET /binarna_pretraga HTTP/1.1 ← početni red: metoda, putanja, verzija
Host: svetprogramiranja.com ← zaglavlja (ime: vrednost)
User-Agent: Mozilla/5.0 (Windows NT 10.0) Chrome/130
Accept: text/html
Accept-Language: sr,en
← prazan red: kraj zaglavlja
GET zahtev nema telo. Kada se šalju podaci (forma, prijava), koristi se POST i podaci idu u telo posle praznog reda:
POST /prijava HTTP/1.1
Host: primer.rs
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
korisnik=ana&lozinka=tajna123
HTTP metode
| Metoda | Značenje | Primer |
|---|---|---|
| GET | pročitaj / donesi | otvaranje stranice, pretraga |
| POST | pošalji nove podatke | slanje forme, registracija, novi komentar |
| PUT / PATCH | izmeni postojeće (celo / deo) | izmena profila |
| DELETE | obriši | brisanje poruke |
| HEAD | kao GET, ali bez tela – samo zaglavlja | provera da li strana postoji |
GET parametri su vidljivi u adresi (?q=petlje) i ostaju u istoriji pregledača, zato se lozinke nikada ne šalju GET-om.
Kako izgleda HTTP odgovor
HTTP/1.1 200 OK ← verzija, statusni kod, opis
Content-Type: text/html; charset=utf-8 ← vrsta sadržaja
Content-Length: 18240
Cache-Control: max-age=3600 ← pregledač sme da čuva kopiju 1 sat
<!DOCTYPE html> ← telo: HTML stranica
<html lang="sr"> ...
Zaglavlje Content-Type govori pregledaču šta je dobio: text/html, text/css, application/javascript, image/png, application/json…
Statusni kodovi
| Grupa | Značenje | Najčešći |
|---|---|---|
| 1xx | informacija | 101 Switching Protocols (prelazak na WebSocket) |
| 2xx | uspeh | 200 OK, 201 Created, 204 No Content |
| 3xx | preusmerenje | 301 Moved Permanently (stara adresa trajno vodi na novu), 302 Found, 304 Not Modified (koristi kopiju iz keša) |
| 4xx | greška klijenta | 400 Bad Request, 401 Unauthorized (nisi prijavljen), 403 Forbidden (nemaš pravo), 404 Not Found, 429 Too Many Requests |
| 5xx | greška servera | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
HTTP nema pamćenje: kolačići i sesije
HTTP je bez stanja (stateless): server ne pamti prethodni zahtev. Kako onda ostaješ prijavljen/a dok prelaziš sa strane na stranu?
- Posle uspešne prijave server u odgovoru pošalje zaglavlje
Set-Cookie: sesija=a8f3…. - Pregledač sačuva kolačić (cookie) i pri svakom sledećem zahtevu istom sajtu pošalje
Cookie: sesija=a8f3…. - Server po toj oznaci prepozna sesiju – zna da si to ti.
Zato je kolačić sesije poverljiv kao lozinka: ko ga ukrade, može da se predstavi kao ti. Više u lekciji Bezbednost web aplikacija.
HTTP, HTTPS i verzije protokola
| Opis | |
|---|---|
| HTTP/1.1 (1997) | tekstualni zahtevi; jedan zahtev po vezi u isto vreme |
| HTTP/2 (2015) | više zahteva istovremeno kroz jednu vezu, kompresija zaglavlja |
| HTTP/3 (2022) | radi preko protokola QUIC (UDP) – brži na lošim mrežama i telefonima |
| HTTPS | bilo koja verzija HTTP-a, ali šifrovana pomoću TLS-a – katanac u adresnoj liniji |
Danas skoro svi sajtovi koriste HTTPS, a pregledači označavaju sajtove bez njega kao „nebezbedne“.
Vežba: posmatraj HTTP u pregledaču i komandnoj liniji
Alat pregledača (DevTools): u Chrome-u, Edge-u i Firefox-u otvara se tasterom F12 (ili desni klik → Inspect / Pregledaj). Najvažniji tabovi su Elements (HTML i CSS stranice), Console (poruke i greške JavaScript-a) i Network (svi zahtevi koje stranica šalje).
- Otvori F12 → Network, pa otvori stranicu koja ne postoji, npr.
/nepostojeca_strana. Kakav je status? - Klikni na zahtev i otvori Headers: pronađi Request Method, Status Code,
Content-TypeiUser-Agent. - U komandnoj liniji (Windows 10/11 ima
curl) ukucaj:
curl -I https://svetprogramiranja.com/uvod_u_web
Opcija -I traži samo zaglavlja (HEAD). Videćeš status 200 i zaglavlja odgovora. Probaj i sa adresom http:// (bez s) – server odgovara preusmerenjem 301 na https.
- Lozinke i lični podaci šalju se POST-om, i samo preko HTTPS-a.
- 404 je greška u adresi (klijent), 500 je greška u kodu na serveru.
- Zaglavlja se pišu kao „Ime: vrednost“, a od tela ih deli jedan prazan red.
Proveri znanje
Otvori kviz
HTTP protokol
1. Koja metoda se koristi za slanje forme za registraciju?
2. Šta znači statusni kod 404?
3. Kako server „pamti“ da si prijavljen/a, kada HTTP nema stanje?
4. Koja grupa kodova označava grešku servera?
