Hypertextový prenosový protokol

Hypertextový prenosový protokol (angl. hypertext transfer protocol), skr. HTTP, je protokol na prenos html dokumentov medzi servermi a klientmi služby WWW. Pôsobí ako primárna metóda prepravy informácií na world wide webe. Pôvodný účel bol poskytovať prostriedky na publikáciu a získavanie HTML stránok.

Vývoj HTTP koordinovalo World Wide Web Consortium a pracovné skupiny Internet Engineering Task Force, čím vytvorili sadu dokumentov RFC, predovšetkým RFC 2616 definujúci HTTP/1.1, dnes používanú verziu HTTP.

HTTP je protokol definujúci požiadavky a odpovede medzi klientmi a servermi. HTTP klient (označovaný ako user agent), ako webový prehliadač zvyčajne začne požiadavku nadviazaním TCP spojenia na určenom porte vzdialeného stroja (štandardne port 80). HTTP server počúvajúci na danom porte čaká, kým klient pošle reťazec s požiadavkou ako "GET / HTTP/1.1" (ktorý žiada o zaslanie štartovacej stránky webservera) nasledovaný sériou hlavičiek podobných MIME opisujúcich detaily požiadavky a nasledovaných telesom ľubovoľných údajov. Niektoré hlavičky sú nepovinné, zatiaľ čo verzia HTTP/1.1 niektoré vyžaduje (ako názov stroja). Po prijatí požiadavky server pošle reťazec s odpoveďou ako "200 OK" nasledovanou hlavičkami spolu so samotnou správou, ktorej telo tvorí obsah požadovaného súboru, chybové hlásenie alebo iná informácia.

Charakteristika a vývoj 
Protokol všeobecne definuje pravidlá medzi dvoma partnermi. Definuje tvar prenášaných informácií, možnosti a náležitosti, požiadavky a odpovede. Hypertext Transfer Protokol (HTTP) je protokol aplikačnej vrstvy. Používa sa pre distribuované hypermediálne informačné systémy. V rámci služby WWW sa používa od roku 1991. Slúži na výmenu HTML dokumentov medzi klientom a serverom. WWW server sa často nazýva aj HTTP serverom. 

Existuje viac verzií protokolu: 
HTTP/0.9:
 prvá verzia
 používa sa od roku 1990, dnes sa už nepoužíva
 otázka: iba metóda GET, bez dodatočných (meta-) informácií
 odpoveď: požadovaný dokument, takisto bez dodatočných informácií
 po prenesení odpovede sa spojenie ukončí
HTTP/1.0
 definovaný v RFC 1945 z roku 1996
 mnoho rozšírení predchádzajúcej verzie; spätne kompatibilný
 otázka: pridané metódy POST a HEAD
 voliteľné ďalšie hlavičky v upravenom formáte MIME (napr. k dotazu: Date, Authorization, From, If-Modified-Since, Referer, User-Agent; k telu dotazu: Content-Encoding, Content-Length)
 voliteľné telo dotazu (entity body)
 odpoveď: pridaná hlavička:
 informácia o stave (status) odpovede
 voliteľné ďalšie hlavičky v upravenom formáte MIME [5] (napr. k odpovedi: Date, Location, WWW-Authenticate; k telu odpovede: Content-Encoding, Content-Length)
 voliteľné telo odpovede (entity body)
HTTP/1.1
 definovaný v RFC 2616 z roku 1999, dnes najčastejšie používaný
 dopĺňa možnosti HTTP/1.0 (hierarchické proxy, kešovanie, trvalé spojenia, virtuálne servery), spätne kompatibilný
 otázka: pridané metódy OPTIONS, PUT, DELETE, TRACE, CONNECT (ktoré sú zriedka používané)
 takmer dvojnásobný počet hlavičiek oproti HTTP/1.0

Protokol HTTP je postavený na princípe otázka-odpoveď. Táto komunikácia prebieha medzi serverom a klientom. Každá aktivita musí byť vyvolaná klientom, pričom komunikácia so serverom prebieha cez TCP (používa sa port 80, ktorý ale nie je podmienkou).

Úplná otázka-odpoveď musí mať špecifikovanú metódu, URI (absolútna alebo relativná cesta k súboru alebo úplné URL dokumentu). Niekedy nasleduje po hlavičkách aj telo otázky oddelené jedným prázdnym riadkom.

Server podporujúci protokol 1.0 vráti odpoveď a spojenie ihneď uzavrie. Protokol 1.1 vytvára tzv. perzistentné spojenie a preto servery podporujúce verziu 1.1 spojenie hneď neuzavrú, ale chvíľu čakajú na ďalšie príkazy. Klient tak môže pokračovať v otázkach na ostatné prvky HTML stánky a spojenie ukončiť sám.

Odpoveď obsahuje verziu protokolu, kód odpovede a textovú hlášku odpovede. Ďalej obsahuje hlavičky, prázdny riadok (oddeľovač) a väčšinou aj telo odpovede.

Druhy žiadostí HTTP 
Zvyčajne sa nazývajú metódy.
 GET Zďaleka najbežnejší typ žiadosti. Žiada o zdroj uvedením jeho URL
 POST Podobne ako GET, okrem toho, že je pridané telo správy zvyčajne obsahujúce dvojice kľúč-hodnota z HTML formulára a taktiež na upload súborov.
 PUT Používa sa na úpravu, resp. editáciu údajov špecifikovaného objektu, podobne ako POST, pričom POST vytvára nový objekt (nové dáta) a PUT upravuje tieto dáta.
 DELETE Zriedka implementované. Zmazanie zdroja.
 HEAD Podobné GET, okrem toho, že sa nepožaduje telo správy, iba hlavičky. Používa sa na získavanie metainformácií o dokumente.
 TRACE Odošle kópiu obdržanej požiadavky späť odosielateľovi, takže klient môže zistiť, čo na požiadavke menia alebo pridávajú servery, ktorými táto prechádza.
 OPTIONS Vracia HTTP metódy, ktoré daný webserver podporuje. Je možné použiť na otestovanie funkcionality servera.
 CONNECT Zriedka implementované, na použitie s proxy serverom, ktorý sa môže zmeniť na SSL tunel.

HTTP sa líši od iných na TCP založených protokolov ako napr. FTP v tom, že spojenia sa zvyčajne ukončia potom, ako sa dokončí vykonávanie požiadavky alebo série požiadaviek. Tento dizajn ho robí ideálnym protokolom pre web, kde stránky často odkazujú na ďalšie stránky na iných serveroch. Príležitostne to spôsobuje problémy webovým návrhárom, keďže chýbajúce perzistentné spojenie si vynucuje alternatívne prístupy udržiavania stavovej informácie o používateľovi. Zvyčajne na to používajú tzv. cookies.

HTTPS je zabezpečená verzia HTTP. Na ochranu dát používa SSL/TLS. Štandardný port služby je TCP port 443. HTTPS je vhodné aj v prípadoch, kedy je autentifikovaný len jeden koniec spojenia -- server. To je typický prípad pri HTTP transakciách cez internet.

Lokáciu dokumentov na webserveri udáva Uniform Resource Locator (URL). Táto adresa má syntax vyvinutú pre vytváranie odkazov na webstránky.

Príklad 
Dolu je príklad konverzácie medzi HTTP klientom a HTTP serverom bežiacom na www.google.com, porte 80.

Klientská požiadavka:
GET / HTTP/1.1
Host: www.google.com
User-Agent: Opera/9.80 (Windows NT 5.1; U; sk) Presto/2.5.29 Version/10.60
Accept-Charset: UTF-8,*

(nasledovaná znakom nového riadku, v tvare znaku carriage return nasledovaného znakom line feed.)

Adresa stroja je určená na rozlíšenie rôznych DNS názvov pre jedinú IP adresu. Kým v HTTP/1.0 bola táto hlavička nepovinná, HTTP/1.1 ju vyžaduje.

Odpoveď servera:
HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqyX9j;
  expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive

(nasledovaná prázdnym riadkom a zdrojovým textom HTML tvoriacim webstránku Google.)

Perzistentnosť spojenia 
Pri HTTP/1.0 klient pošle požiadavku serveru, server pošle odpoveď späť klientovi a následne sa spojenie ukončí. HTTP/1.1 však podporuje perzistentné spojenia. To umožňuje klientovi poslať požiadavku a dostať odpoveď a následne tým istým spojením posielať ďalšie požiadavky a prijímať ďalšie odpovede. Tým sa znižuje relatívna réžia TCP. Je tiež možné poslať viacero (zvyčajne dve) požiadavky pred obdržaním odpovede. Táto metóda sa nazýva „pipelining“.

Referencie

Pozri aj 
 Uniform Resource Locator
 HTTP proxy

Externé odkazy 
 Špecifikácia HTTP/1.1 (Jún 1999) RFC2616
 Errata špecifikácie HTTP/1.1
 Originálny návrh protokolu HTTP z roku 1992 od Tima Berners-Lee
 Zoznam stavových kódov HTTP
 HTTP sekvenčný diagram

Internetové protokoly
Hypertext