920 likes | 1.11k Views
HTTP Hypertext Transfer Protocol. Gordan Gledec. Sadržaj. dizajn i svojstva protokola elementi protokola poruke, zaglavlja, metode zahtjeva, klase odgovora cache HTTP i upravljanje vezom pregovori o sadržaju sigurnost i autentifikacija uravnoteženje opterećenja
E N D
HTTPHypertext Transfer Protocol Gordan Gledec
Sadržaj • dizajn i svojstva protokola • elementi protokola • poruke, zaglavlja, metode zahtjeva, klase odgovora • cache • HTTP i upravljanje vezom • pregovori o sadržaju • sigurnost i autentifikacija • uravnoteženje opterećenja • interakcija HTTP-a i TCP-a
Hypertext Transfer Protocol • koristi TCP, podrazumijevan port 80 • izvorno za prijenos hiperteksta, danas ima gotovo univerzalnu primjenu • prijenos datoteka (umjesto FTP-a) • webizirane usluge poput webmaila • web services • prva verzija "0.9" - ograničene mogućnosti • podržava prijenos samo hipertekstualnih dokumenata
HTTP/1.0 • prvi standard - HTTP/1.0 - RFC 1945, svibanj 1996. • 2 draft-verzije 1993. godine • podržava prijenos različitih tipova podataka • posuđuje koncepte iz standarda MIME • zadržava kompatibilnost unazad • sredinom 90-tih - HTTP promet dominira - HTTP/1.0 neučinkovit • svako sjedište mora biti na drugom poslužitelju • neučinkovito korištenje TCP protokola (prevladavale male datoteke) • nema garancije za primanje dinamičkog sadržaja • nema podrške za upravljanje performansama - cache, proxy, djelomični dohvat, poštivanje preferenci klijenta • nema podrške za nastavak prekinutog prijenosa resursa • proizvođači preglednika i poslužitelja uvode svoja proširenja
HTTP/1.1 • verzija 1.1 definirana s RFC-om 2616 u lipnju 1999. • zadržava kompatibilnost unazad • RFC 2617 - autentifikacija i sigurnost • poboljšanja: • hop-by-hop, transfer coding • jedno fizičko računalo - više web poslužitelja - "virtualni host" • trajne konekcije - više zahtjeva preko jedne TCP konekcije • djelomični dohvat sadržaja • bolja podrška za cache i proxy – semantička transparentnost • pregovaranje o sadržaju datoteteke (content negotiation) • bolji sigurnosni mehanizmi - autentifikacija
Svojstva protokola • globalni URI • razlika: URI, URL, URN (RFC 2396) • apsolutni i relativni URL • razmjena zahtjeva i odgovora • uvijek klijent inicira komunikaciju • ne čuva stanje • lakša izvedba, skalabilnost • uključuje informacije o resursima • metadata - odnose se na resurs, ali nisu dio resursa • npr. duljina resursa, datum zadnje promjene, encoding
Elementi protokola • poruka (message) • zahtjev ili odgovor • entitet • reprezentacija resursa koja je uključena u HTTP poruku • sadrži zaglavlja entiteta i tijelo entiteta • zaglavlje: metapodaci • resurs • mrežni objekt kojeg je moguće identificirati URI-jem • korisnički agent (user agent) • klijent koji šalje zahtjev (preglednik, robot...)
Razmjena poruka DNS poslužitelj http://www.tel.fer.hr/poslijediplomski/ /poslijediplomski/ IP www.tel.fer.hr ? 161.53.19.221 disk Web preglednik premijer.tel.fer.hr161.53.19.221 GET /poslijediplomski/ HTTP/1.0 ... Web poslužitelj HTTP/1.0 200 OK ... usmjeritelj
HTTP poruke • zahtjev i odgovor moraju biti ispravno formatirani • HTTP definira opći format poruke • tekstualan zapis (kao SMTP) • naslanja se na format e-mail poruke (RFC 822) i standarda MIME • dijele neka načela, ali ne sasvim i ne potpuno • npr. ne koriste se sva zaglavlja iz MIME • npr. tijelo ne mora biti 7-bitni ASCII
Poruke kod protokola HTTP zahtjev odgovor GET /poslijediplomski/ HTTP/1.1 Host: www.tel.fer.hr Connection: Keep-Alive Accept-Language: hr Accept-Encoding: gzip, deflate HTTP/1.1 200 OK Date: Sat, 16 Apr 2005 14:23:46 GMT Server: Apache/1.3.26 (Unix) ... Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html Content-Language: hr <html> ... ... </html>
Format poruka zahtjev odgovor početni redak GET /poslijediplomski/ HTTP/1.1 Host: www.tel.fer.hr Connection: Keep-Alive Accept-Language: hr Accept-Encoding: gzip, deflate HTTP/1.1 200 OK Date: Sat, 16 Apr 2005 14:23:46 GMT Server: Apache/1.3.26 (Unix) ... Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html Content-Language: hr <html> ... ... </html> polja zaglavlja: opća zaglavljazaglavlja karakteristična za zahtjev ili odgovor zaglavlja karakteristična za entitet prazanredak tijeloporuke
Oblikovanje zahtjeva • početni redak sadrži (request line): • nad kojim resursom je podnesen zahtjev • koja metoda (operacija) se traži nad tim resursom • koja se verzija protokola koristi <metoda> <URI> <verzija> • primjeri: • GET/HTTP/1.0 • POST/shop/orderHTTP/1.1 • HEAD/search?q=telematikaHTTP/1.0
Metode zahtjeva • što se traži od resursa • naziv metode je osjetljiv na mala/velika slova • uvijek se koriste velika slova • HTTP/1.1 definira 8 metoda i omogućuje dodavanje novih metoda (extensions) • naziv "metoda" se koristi jer HTTP standard koristi terminologiju iz područja objektno-orijentiranog programiranja • dva osnovna svojstva: • sigurnost i idempotentnost • najpoznatije metode: GET, HEAD i POST
Metoda GET • GET - najkorištenija metoda • znači “Pribavi reprezentaciju tog resursa” • aktivira se kod upisivanja adrese u preglednik ili klika na link • ako poslužitelj ima zahtjevani resurs, vraća ga u tijelu odgovora, inače vraća grešku • ponašanje metode GET se mijenja ako se koristi uvjetni GET (zaglavlje If-Modified-Since: ili If-Match:) • moguće koristiti djelomični GET (partial GET) - dohvaća se samo dio datoteke
Primjeri GET-a GET / HTTP/1.0 GET /a/b?c HTTP/1.1 Host: www.tel.fer.hr prazan red, bez tijela GET /obicni.txt HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Language: hr Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Host: www.tel.fer.hr Connection: Keep-Alive
Metoda POST • šalje podatke poslužitelju u tijelu zahtjeva • može se koristiti kod ispunjavanja obrazaca • podaci koje je upisao korisnik, prenose se metodom POST na poslužitelj i tamo se obrađuju • zahtjev za provedbom narudžbe • dodavanje vlastitog komentara tekstu na Webu • prijavljivanje na termin laboratorijskih vježbi • ne aktivira se klikom na link, nego npr. pritskom na gumb “Submit” na obrascu
Primjer POST-a POST /search HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg... Accept-Language: hr Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Host: localhost:4744 Content-Length: 44 Connection: Keep-Alive Cache-Control: no-cache q=telematika&num=20&search=Pretra%9Ei+Web%21
Metoda HEAD • HEAD vraća identičan odgovor kao i GET, ali poslužitelj ne vraća sadržaj traženog resursa u tijelu odgovora • najčešće se koristi kako bi se provjerilo postoji li entitet na poslužitelju • druge uporabe: • provjera veličine datoteke prije dohvaćanja • pribavljanje metainformacija o entitetu • na poslužitelju se HEAD zahtjev obrađuje jednako kao i GET, samo što se prenose samo zaglavlja odgovora
Ostale metode • OPTIONS • informiranje o mogućnostima resursa i poslužitelja (URI = *) • PUT • postavljanje entiteta uključenog u tijelu zahtjeva na zadani URI • POST u URI navodi resurs koji mora obraditi podatke koji se šalju u tijelu zahtjeva • PUT navodi naziv resursa u kojeg treba pohraniti podatke koji se šalju u tijelu • najčešće se ne koristi - sigurnosni rizik • DELETE – brisanje odabranog resursa - ne koristi se • TRACE – klijent dobiva kopiju zahtjeva kojeg je uputio poslužitelju, služi za dijagnostiku • CONNECT - za buduću uporabu, ne implementira se
Vrste zaglavlja zahtjeva • općenita zaglavlja • odnose se na poruku, a ne na njen sadržaj • mogu se pojaviti i u zahtjevu i u odgovoru • zaglavlja karakteristična za zahtjev • poslužitelju daju više informacija o prirodi zahtjeva • omogućuju klijentu da kontrolira kako će se zahtjev ostvariti • npr. uvjetni zahtjev - samo ako su ispunjeni određeni uvjeti • klijent obavještava poslužitelja koje vrste podataka može obraditi • tipovi: preference, informacije, uvjet, ograničenje • zaglavlja karakteristična za entitet • opisuju entitet koji se nalazi u tijelu poruke, ako ga ima
Zaglavlja zahtjeva METHOD: • GET* • POST* • HEAD* • PUT * • OPTIONS • TRACE • CONNECT • DELETE* • *LINK • *UNLINK Method Request-URI HTTP-Version parametar1: vrijednost parametar2: vrijednost parametar3: vrijednost .... <prazna linija> HTTP/1.0* HTTP/1.1 entity_header *Allow: *Content-Encoding: Content-Language: *Content-Length: Content-Location: Content-MD5: Content-Range: *Content-Type: *Expires: *Last-Modified: extension-header request_header Accept: *If-Modified-Since: Accept-Charset: If-None-Match: Accept-Encoding: If-Range: Accept-Language: If-Unmodified-Since: *Authorization: Max-Forwards: Expect: Proxy-Authorization: *From: Range: Host: *Referer: If-Match: TE: *User-Agent: general_header Cache-Control: Connection: *Date: *Pragma: Trailer: Transfer-Encoding: Upgrade: Warning:
Odgovor poslužitelja • početniredak sadrži: • verziju protokola • statusni kôd • opisnu frazu HTTP/1.1303See Other • u tijelu odgovora se obično prenosi entitet koji korisnički agent (preglednik) treba prikazati korisniku • neka polja zaglavlja: • Content-Type: format entiteta • Content-Length: duljina entiteta u tijelu u oktetima
Vrste zaglavlja odgovora • opća zaglavlja • odnose se na poruku, a ne na njen sadržaj • mogu se pojaviti i u zahtjevu i u odgovoru • zaglavlja karakteristična za odgovor • klijentu daju više informacija o odgovoru • dio informacija može se prenijeti i u tijelu poruke (npr. opis pogreške) • zaglavlja karakteristična za entitet • opisuju entitet koji se nalazi u tijelu poruke, ako ga ima • češće se koriste kod odgovora nego kod zahtjeva
Klase odgovora • sastoji se od tri dekadske znamenke • slično kao kod FTP i SMTP • pet kategorija: • 1xx – informativne - ne naznačuju ni uspjeh, ni neuspjeh • 2xx – uspjeh - poslužitelj je primio, razumio i ispunio zahtjev • 3xx – preusmjeravanje - potrebno poduzeti dodatne akcije • 4xx – greška na klijentu - zahtjev je neispravan • 5xx – greška na poslužitelju - zahtjev je dobar, ali poslužitelj ga ne može ispuniti
Zaglavlja odgovora Informacija 100 Continue Uspjeh 200 OK* 201 Created* 202 Accepted* 204 No Content* Preusmjeravanje 300 Multiple Choices* 301 Moved Permanently* 302 Moved Temporarily** 304 Not Modified Greška kod klijenta 400 Bad Request* 401 Unauthorized* 403 Forbidden* 404 Not Found* Greška na poslužitelju 500 Internal Server Error* 501 Not Implemented* 502 Bad Gateway* 503 Service Unavailable* HTTP-Version Status-Code Reason-Phrase parametar1: vrijednost parametar2: vrijednost parametar3: vrijednost .... <prazna linija> <html> - tijelo dokumenta - </html> HTTP/1.0 HTTP/1.1 response_header Accept-Ranges: Age: ETag: *Location: Proxy-Authenticate: Retry-After: *Server: Vary: *WWW-Authenticate: entity_header *Allow: *Content-Encoding: Content-Language: *Content-Length: Content-Location: Content-MD5: Content-Range: *Content-Type: *Expires: *Last-Modified: extension-header general_header Cache-Control: Connection: *Date: *Pragma: Trailer: Transfer-Encoding: Upgrade: Warning:
Informativni odgovor (1xx) • nije ih bilo u HTTP/1.0 • 100 (Continue) • za optimizaciju bandwidtha • 101 (Switching Protocols) • proširivost – prijelaz na druge protokole
Uspješan odgovor (2xx) • poslužitelj je uspješno primio, razumio i ispunio zahtjev • najčešći kôd 200 (OK) • za zahtjev GET znači da je dostavljeni entitet u tijelu odgovora sadržaj resursa • za POST znači da je resurs primio podatke i dostavljeni entitet opisuje ishod akcije • najčešći odgovor na Webu
Drugi kôdovi uspješnog odgovora • 201 (Created) - rezultat metode PUT • 204 (No Content) • poslužitelj je ispunio zahtjev, ali nema potrebe da vraća ikakav entitet u tijelu odgovora (npr. anketa) • korisnički agent ne mijenja prikaz prošlog entiteta • 205 (Reset Content) • korisnički agent treba sadržaj postojećeg entiteta postaviti na početne vrijednosti • namijenjeno za višestruki unos podataka preko obrasca • 206 (Partial Content) • vraćena je djelomična manifestacija resursa • zahtjev je sadržavao polje zaglavlja Range:
Preusmjeravanje (3xx) • klijent treba poduzeti dodatne korake kako bi ispunio izvorni zahtjev • novi URI se nalazi u polju zaglavlja Location: • sigurne metode se mogu izvršiti bez sudjelovanja korisnika • sigurne: GET, HEAD, OPTIONS, TRACE klijent zahtjev nad /uri1 poslužitelj(i) preusmjeri na /uri2 zahtjev nad /uri2 uspješan odgovor sa /uri2
Kôdovi preusmjeravanja • ponekad se resursu dodjeli drugi URI, pa se poslužitelj može konfigurirati da preusmjerava zahtjeve na novu adresu • 301 (Moved Permanently) • resurs je trajno premješten i svi bi budući zahtjevi trebali biti usmjereni na novi URI • 302 (Found) - ranije Moved Temporarily • resurs privremeno koristi drugi URI, klijent i dalje može koristiti stari URI • POST pretvara u GET (to je trebao raditi 303, browseri ne poštuju RFC) • 307 (Temporary Redirect) • resurs je samo privremeno premješten, pa se treba sačuvati stara adresa • klijent ponavlja identičan zahtjev nad novim URI-jem • ako metoda nije sigurna, traži se potvrda korisnika • u tijelu odgovora se može nalaziti poruka za “ručno” preusmjeravanje
303 (See Other) • zahtjev je ispunjen, ali sada treba prikazati sadržaj nekog drugog resursa (treba izvršiti GET nad resursom identificiranom u polju Location) • budući da je GET siguran, preusmjeravanje se vrši automatski K P K P POST /uri1 GET /uri1 301 Moved Permanently Location: /uri2 303 See Other Location: /uri2 ? POST /uri2 GET /uri2
304 (Not Modified) • uvjetni (conditional) GET • koristi polja zaglavlja • If-Modified-Since: • If-Unmodified-Since: • If-Match: • If-Unmatch: • 304 (Not Modified) • traženi resurs nije promijenio sadržaj od zadnjeg zahtjeva • klijent može koristiti kopiju entiteta iz cache-a
Pogreške klijenta (4xx) • namijenjena za slučajeve kad se čini da je pogreška nastupila na klijentovoj strani • razjašnjenja, status pregovora, duljina resursa, novi zahtjevi • odgovor treba sadržavati poruku namijenjenu korisniku u kojem se opisuje situacija i nude rješenja • 400 (Bad Request) • pogreška u sintaksi zahtjeva • 404 (Not Found) • resurs nije dostupan, ali se ne ulazi u detalje zašto • obično je pogreška pri utipkavanju URI-ja
Autorizacija (kôd 401) • 401 (Unauthorized) • zahtjevu nedostaje autorizacija korisnika • odgovor sadrži izazov klijentu u polju WWW-Authenticate: • klijent ponavlja zahtjev sa dodanim poljem Authorization: koje sadrži npr. šifrirano korisničko ime i zaporku • poslužitelj izvršava zahtjev ako on sadrži potrebnu autorizaciju • nije isto što i autorizacija preko cookieja!
Ostale pogreške klijenta • 403 (Forbidden) • poslužitelj odbija ispuniti taj zahtjev, bez obzira na autorizaciju • primjer: klasični poslužitelj nema pristup datoteci • 405 (Method Not Allowed) • nije dozvoljena tražena metoda nad tim resursom • 406 (Not Acceptable) • 410 (Gone) • resurs na tom URI-ju nije više dostupan i neće ni biti, pa je uzaludno ponavljati zahtjeve • 411 (Length Required) • 414 (Request-URI Too Long)
Za moguća proširenja... • 402 (Payment Required) • 409 (Conflict) • 412 (Precondition Failed) • 416 (Requested Range Not Satisfiable) • 417 (Expectation Failed)
Pogreške poslužitelja (5xx) • kod ovakvih odgovora poslužitelj je svjestan da zahtjev nije ispunjen zbog njegove greške • 500 (Internal Server Error) • obično programska greška u resursu • 503 (Service Unavailable) • poslužitelj je preopterećen • odgovor može sadržavati Retry-After: polje
Upravljanje vezom • gotovo sve poznate izvedbe HTTP protokola koriste TCP kao prijenosni protokol • TCP nije optimiziran za kratkotrajne konekcije tipične za razmjenu HTTP poruka • 3 segmenta za three-way handshake • 4 segmenta za raskid veze • često cijela razmjena HTTP prometa stane u 10 segmenata • pretek: 7/17 - transfer i ne izađe iz faze slow-start - ne koristi se puni kapacitet prijenosa • kad su u stranicu uključene slike i dodatni elementi, za svaki od njih mora se uspostaviti dodatna veza - problem se pogoršava
Zaglavlje Connection: • omogućuje definiranje karaktera veze između entiteta koji sudjeluju u ostvarenju zahtjeva • korisnik, poslužitelj, proxy, cache • zaglavlje Connection prenosi tri vrste podataka: • nazive zaglavlja važnih za konekciju • ne prenose se dalje • nestandardne vrijednosti koje opisuju konekciju • vrijednost close kojom se traži zatvaranje veze nakon obavljena posla
Nekad... • dohvat 4 resursa (HTML + 3 slike) • otvaraju se 4 konekcije
Paralelne konekcije • nije uvijek brže! • kod sporih konekcija veze se natječju za isti bandwidth pa se svaki objekt učitava proporcionalno sporije (mada je dojam da je brže!) • u svakoj ima slow start! • tako je nekad radio Netscape • preglednici ograničavaju broj paralelnih konekcija
Problemi s paralelnim konekcijama • nije fer prema ostalim klijentima • koriste se potencijalno njihovi resursi (jedan npr. 80% linka, drugi 20%) • povećano opterećenje mreže i poslužitelja • povećano kašnjenje na sporim vezama • rješenja: • filtriranje prometa na usmjeriteljima (između krajnjih točaka) • korištenje trajnih konekcija (ostaju problemi parelelnog downloada)
Trajne konekcije • većina veza je između klijenta i istog poslužitelja • ponovno se koriste iste veze • trajna veza ostaje otvorena nakon prijenosa jednog HTTP-zahtjeva dok ih klijent ili poslužitelj ne zatvore • izbjegava se postupak uspostave veze • kombinacija: paralelne trajne konekcije
HTTP/1.0 - Keep-alive • podrška za trajne konekcije izvorno nije postojala u HTTP/1.0 • kasnije izvedbe uključuju zaglavlje Connection: Keep-alive • poslužitelji koji ga prihvaćaju ne zatvaraju konekciju • problem s dinamičkim sadržajem - poslužitelj je morao zatvoriti konekciju kako bi klijentu dao do znanja koliko podataka mu prenosi • Content-Length je nepraktičan radi dodatnog čekanja • nema garancije • nije default • ako server ne vrati zaglavlje Connection, podrazumijeva se da se veza zatvara • veliki problemi sa proxyjima koji ne razumiju zaglavlje Connection (blind relay)