Menu Zavrieť

2.3. Aplikačný protokol HTTP

HTTP: hypertext transfer protocol, verzia HTTP 1.0: RFC 1945, verzia HTTP 1.1: RFC 2068, verzia HTTP 2: RFC 7540

Protokol HTTP používa klient/server architektúru. Klientsky proces (HTTP klient) predstavuje webový prehliadač (Firefox, Internet Explorer, Chrome, Opera a iné), ktorý kontaktuje webový server (Apache Web server, Microsoft IIS). HTTP klient na základe URL adresy zistí adresu webového servera a cestu na webovom serveri k objektu, o ktorý má používateľ záujem. Objektom posielaným cez HTTP protokol môže byť čokoľvek. Najčastejšie ide o základný HTML súbor obsahujúci URL adresy ďalších objektov (obrázkov, videí, hudby, CSS štýlov, …) výslednej webovej stránky, ktoré si HTTP klient následne po jednom opýta, aby zobrazil používateľovi výslednú webovú stránku.

HTTP protokol využíva TCP protokol transportnej vrstvy. Webový server obvykle obsadzuje port 80. Prehliadač to predpokladá, a preto ak do URL adresy nedodáme číslo portu, je automaticky použitý port 80.

HTTP protokol používa dva typy správ, požiadavky (HTTP request) od klienta a odpovede (HTTP response) od servera.

2.3.1  HTTP požiadavka

HTTP požiadavka sa skladá z príkazového riadka, hlavičky a tela. Klient v príkazovom riadku HTTP požiadavky uvádza metódu (GET, POST, HEAD, PUT alebo DELETE), časť URL adresy predstavujúcu cestu v adresároch webového sídla a verziu protokolu, ktorým chceme komunikovať.

Príklad príkazového riadka HTTP požiadavky a jedného riadka hlavičky, v ktorej žiadame protokolom HTTP verzie 1.1 súbor index.html v adresári webového servera /oddelenie na počítači www.inštitúcia.sk:

GET /oddelenie/index.html HTTP/1.1
Host: www.inštitúcia.sk

Úplná URL adresa tohto súboru je www.inštitúcia.sk/oddelenie/index.html. V prípade, že potrebujeme žiadanej webovej stránke odovzdať aj nejaké dáta, získané obvykle z webového formulára, boli by otáznikom oddelené od požadovaného súboru. Napríklad, ak posielame meno a priezvisko, tak URL adresa by vyzerala nasledovne www.inštitúcia.sk/oddelenie/index.html?meno=Peter&priezvisko=Gursk%C3%BD a teda HTTP požiadavka by vyzerala nasledovne:

GET /oddelenie/index.html?meno=Peter&priezvisko=Gursk%C3%BD@@ HTTP/1.1
Host: www.inštitúcia.sk

Poznámka: Trochu rušivo pôsobí %C3%BD, čo predstavuje binárny kód znaku „ý“ v UTF-8 kódovaní „preložený“ do 7 bitového ASCII kódovania metódou URL encoding. Navyše tento riadok môže byť iný, ak je prednastavené kódovanie v prehliadači iné. To, aké kódovanie bolo použité pôvodne, sa uvádza ako ďalší z riadkov hlavičky (Accept-Charset: UTF-8,*)

Dáta sa môžu tiež odosielať metódou POST. V tom prípade to, čo sa písalo pri metóde GET v URL adrese za otáznik, sa uvádza v tele požiadavky. Táto metóda je obľúbenejšia a používateľsky príjemnejšia, keďže nezobrazuje odoslané dáta z formulára v URL adrese (napríklad heslo).

V skratke ešte povedzme, na čo sa používajú zvyšné 3 príkazy. HEAD má rovnakú funkciu ako GET alebo POST s tým rozdielom, že od servera nechceme výslednú stránku, ale len HTTP hlavičku odpovede. Príkaz PUT sa používa na odosielanie súboru a príkaz DELETE na mazanie súboru na serveri.

2.3.2  HTTP odpoveď

HTTP odpoveď sa skladá z riadka odpovede, hlavičky a tela. Riadok odpovede sa skladá z verzie protokolu, kódu stavu a komentára stavu vyriešenia požiadavky.

Základným kódom stavu odpovede je 200 s komentárom OK, označujúci, že požiadavka na objekt bola úspešná a v tele tejto odpovede je pribalený požadovaný objekt. Kódy začínajúce číslom 3 obvykle znamenajú, že stránka bola presunutá a v hlavičke, v časti Location, je uvedené kam. Kódy začínajúce číslom 4 znamenajú, že požadovaný objekt sa z nejakého dôvodu nedá poslať. Kódy začínajúce číslom 5 sú chybové stavy, s ktorými sa HTTP server nevedel vysporiadať. Pre úplný prehľad kódov odpovedí si pozrite RFC 2068.

2.3.3  Niektoré ďalšie vlastnosti HTTP protokolu

Protokol HTTP verzie 1.0 funguje len v neperzistentnom režime. To znamená, že server po každej odpovedi klientovi uzavrie TCP spojenie. Ak má webová stránka povedzme 10 obrázkov, potrebujeme pre každý z nich iniciovať TCP spojenie so serverom. Protokol HTTP verzie 1.1 už umožňuje prácu v perzistentnom režime, v ktorom klient môže v hlavičke špecifikovať, aby server po odpovedi ešte neuzavrel spojenie (Connection: keep-alive) a až v poslednej požiadavke pre danú stránku môže (ale aj nemusí) oznámiť serveru, že po odpovedi na ňu už môže spojenie uzavrieť (Connection: close).

Protokol HTTP je bezstavový. Umožňuje však webovým portálom, aby si v prípade potreby manažovali stav sami. Pre každé novovytvorené spojenie vytvorí jedinečný identifikátor, ktorý pošle klientovi v časti hlavičky zvanej Cookie. Keď klient posiela požiadavku a v hlavičke tiež uvedie Cookie identifikátor, ktorý pred tým dostal od tohto webového servera, webový server ho skontroluje so svojou databázou vygenerovaných identifikátorov a v prípade nájdenia zhody poskytne tento identifikátor webovému portálu, ktorý takto môže udržiavať stav komunikácie s daným klientom.

2.3.4  HTTP 2.0

Protokol HTTP 2 výrazne zrýchľuje celú komunikáciu efektívnejším perzistentným režimom. Efektívnejšie spracovanie je umožnené hlavne používaním binárnych rámcov namiesto pôvodných textových HTTP požiadaviek a odpovedí ako základných častí dát zasielaných v správach.

Definuje 10 typov rámcov. HEADERS rámec požiadavky, ako náprotivok hlavičky HTTP/1.x požiadavky, definuje nový prúd dát v rámci spojenia, ktorý má zabezpečiť stiahnutie jedného objektu. Jeden objekt je potom zo servera vysielaný v niekoľkých rámcoch – najprv HEADERS rámec odpovede nasledovaný rámcami typu DATA, prípadne aj typu CONTINUATION (pokračovanie HEADERS alebo DATA rámca, ak hlavička alebo dáta sú väčšie ako maximálna veľkosť rámca). Každý prúd dát môže mať rôznu prioritu, ktorá umožní zasielanie rámcov jedného objektu častejšie ako iného. Ďalšími vychytávkami sú:

  • možnosť pre server zasielať objekty bez vyžiadania, ak server predpokladá, že prehliadač bude daný objekt potrebovať,
  • nastavovanie vzájomných závislostí prúdov (ak mi nepošleš tento objekt, tak objekty na ňom závislé tiež neposielaj),
  • zaslanie nastavení servera/prehliadača v rámci typu SETTINGS iba raz pre celé spojenie, namiesto uvádzania v každej hlavičke
  • kompresia hlavičiek, kde ďalšie hlavičky obsahujú iba rozdiely oproti predchádzajúcim hlavičkám
  • možnosť použitia spojenia so serverom pre viaceré domény, ak sú hostované na serveri s rovnakou IP adresou
  • obmedzenie menej spoľahlivých foriem šifrovania komunikácie

Viac o protokole HTTP 2 sa môžete dočítať aj v tomto peknom článku na serveri oreilly.com, alebo kratšie, ale česky v článku Pavla Satrapy.

2.3.5  Proxy server

Proxy server je špeciálny program, ktorý funguje ako sprostredkovateľ webových stránok pre klienta. Ak chceme využiť služby proxy servera, môžeme v prehliadači nastaviť na akom počítači a porte proxy server počúva. Potom už všetka komunikácia z prehliadača ide cez proxy server. Pre úplnosť dodajme, že časté sú aj transparentné proxy servery, ktoré fungujú „neviditeľne“ tak, že cez nich je administrátorom routra presmerovaná komunikácia smerujúca mimo lokálnu sieť na porty 80.

Proxy server je vytvorený na to, aby odľahčil pomalé internetové pripojenia tak, že objekty, ktoré už raz boli z internetu stiahnuté, boli prehliadaču poskytované z cache tohto proxy servera. Je však prirodzené, že webové stránky menia v čase svoj obsah a používatelia by radi videli aktuálne stránky. Toto je vyriešené cez podmienenú HTTP požiadavku na webový server. Proxy server v prípade, že prehliadač od neho žiada stránku, ktorú má v cache, pridá do hlavičky požiadavky časovú pečiatku poslednej modifikácie daného objektu (If-modified-since:<dátum a čas>). Ak server zistí, že nemá novšiu verziu daného objektu, posiela iba hlavičku s kódom 304 Not Modified. Ak však má novšiu verziu, pošle celý objekt aj s novou časovou pečiatkou poslednej zmeny.

V súčasnosti sa proxy server často používa na logovanie webovej komunikácie a aj na obmedzenie prístupu na určité webové stránky, čo sa využíva hlavne na ochranu malých detí, na školách, ale často aj vo firmách.