1 / 92

HTTP Hypertext Transfer Protocol

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

Télécharger la présentation

HTTP Hypertext Transfer Protocol

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HTTPHypertext Transfer Protocol Gordan Gledec

  2. 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

  3. 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

  4. 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

  5. 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

  6. Elementi i svojstva protokola

  7. 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

  8. 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...)

  9. 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

  10. 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

  11. 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>

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. Zaglavlja zahtjeva i odgovora

  22. 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

  23. 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:

  24. 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

  25. 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

  26. 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

  27. 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:

  28. Kodovi odgovora

  29. Informativni odgovor (1xx) • nije ih bilo u HTTP/1.0 • 100 (Continue) • za optimizaciju bandwidtha • 101 (Switching Protocols) • proširivost – prijelaz na druge protokole

  30. 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

  31. 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:

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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!

  38. 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)

  39. Za moguća proširenja... • 402 (Payment Required) • 409 (Conflict) • 412 (Precondition Failed) • 416 (Requested Range Not Satisfiable) • 417 (Expectation Failed)

  40. 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

  41. Upravljanje vezom

  42. 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

  43. 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

  44. Nekad... • dohvat 4 resursa (HTML + 3 slike) • otvaraju se 4 konekcije

  45. 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

  46. 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)

  47. 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

  48. Razlika između serijskih i trajnih veza

  49. 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)

  50. Problem proxyja

More Related