{"id":382,"date":"2023-12-27T20:05:11","date_gmt":"2023-12-27T19:05:11","guid":{"rendered":"https:\/\/spireng.sk\/?p=382"},"modified":"2025-02-23T09:50:18","modified_gmt":"2025-02-23T08:50:18","slug":"http-2","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/http-2\/","title":{"rendered":"HTTP\/2"},"content":{"rendered":"<p>HTTP je jedn\u00fdm zo\u00a0\u0161tandardov, na ktor\u00fdch stoj\u00ed internet. P\u00f4vodne vznikol, aby poskytoval dokumenty ulo\u017een\u00e9 na serveroch, dnes sa ale pou\u017e\u00edva okrem dokumentov aj na v\u00fdmenu \u00fadajov, a\u00a0to nie len medzi pou\u017e\u00edvate\u013eom a\u00a0serverom, ale aj medzi servermi navz\u00e1jom. V\u00fdhodou HTTP je jeho jednoduchos\u0165, ale z\u00e1rove\u0148 aj schopnos\u0165 prisp\u00f4sobi\u0165 sa. Svet IT ale neust\u00e1le napreduje a\u00a0na v\u0161etko s\u00fa kladen\u00e9 nov\u00e9 po\u017eiadavky (funk\u010dn\u00e9, v\u00fdkonnostn\u00e9, bezpe\u010dnostn\u00e9). Preto sa podarilo po dlhej dobe \u0161tandardizova\u0165 nov\u00fa verziu \u2013 HTTP\/2. Po\u010fme sa pozrie\u0165 na to, \u010do je nov\u00e9 v\u00a0HTTP\/2.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Ak sa pozrieme trochu do hist\u00f3rie, zist\u00edme, \u017ee pred HTTP\/2 existovali 3 verzie HTTP. Verzie 0.9, 1.0 a&nbsp;1.1. T\u00e1 prv\u00e1 podporovala len GET pr\u00edkaz a&nbsp;nevedela pren\u00e1\u0161a\u0165 hlavi\u010dky (to je len na uk\u00e1\u017eku, ako to v\u0161etko za\u010dalo). Prv\u00fdm \u0161tandardnom sa stala a\u017e verzia 1.1, a&nbsp;to v&nbsp;roku 1997. Odvtedy sa dlho ni\u010d nedialo \u2013 vlastne sa toho v&nbsp;IT (a v&nbsp;internete zvl\u00e1\u0161\u0165) udialo stra\u0161ne ve\u013ea, ale HTTP v\u010faka svojej jednoduchosti a&nbsp;flexibilite (je mo\u017en\u00e9 prid\u00e1va\u0165 \u013eubovo\u013en\u00e9 hlavi\u010dky, obsah spr\u00e1vy m\u00f4\u017ee by\u0165 tie\u017e \u010doko\u013evek \u2013 HTML, JSON, XML&#8230;) to v\u0161etko dok\u00e1zal pre\u017ei\u0165.<\/p>\n\n\n\n<p>Samozrejme ide\u00e1lne to nie je a&nbsp;HTTP 1.1 trp\u00ed mnoh\u00fdmi nedostatkami a&nbsp;jeden z&nbsp;nich \u2013 v\u00fdkon \u2013 si vybral Google, ke\u010f za\u010dal pracova\u0165 na novom protokole SPDY, ktor\u00fd by mohol HTTP nahradi\u0165. Nakoniec sa stalo to, \u010do sa v&nbsp;IT deje be\u017en\u00e9, \u017ee z&nbsp;existuj\u00faceho rie\u0161enia sa stane \u0161tandard. A&nbsp;tak zo SPDY vznikol nov\u00fd \u0161tandard HTTP\/2 (p\u00edsal sa rok 2015 \u2013 teda 18 rokov po tom, \u010do bol \u0161tandardizovan\u00fd HTTP 1.1).<\/p>\n\n\n\n<p>Ako som u\u017e nap\u00edsal. Google si z&nbsp;t\u00fdch mnoh\u00fdch probl\u00e9mov, ktor\u00fdmi HTTP 1.1 trpel, vybral ako najv\u00e4\u010d\u0161\u00ed v\u00fdkon. A&nbsp;tomu aj zodpovedaj\u00fa nov\u00e9 vlastnosti, ktor\u00e9 dvojkov\u00e1 verzia oproti verzii 1.1 dostala:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Multiplex <\/strong>\u2013 pri star\u0161\u00edch verzi\u00e1ch klient poslal cez TCP po\u017eiadavku a\u00a0\u010dakal za odpove\u010fou. A\u00a0a\u017e ke\u010f pri\u0161la, tak mohol (aj t\u00fdm ist\u00fdm TCP spojen\u00edm) posla\u0165 \u010fal\u0161iu. Pri HTTP\/2 m\u00f4\u017eu cez kan\u00e1l pr\u00fadi\u0165 naraz nieko\u013eko dotazov a\u00a0odpoved\u00ed. Ako presne, to rozoberiem o\u00a0chv\u00ed\u013eu.<\/li><li><strong>Komprim\u00e1cia hlavi\u010diek<\/strong> \u2013 HTTP\/1.1 umo\u017e\u0148uje komprimova\u0165 obsah spr\u00e1vy. HTTP\/2 k\u00a0tomu prid\u00e1va aj komprim\u00e1ciu hlavi\u010diek. Komprima\u010dn\u00fd \u0161tandard je HPACK, ktor\u00fd bol vyvinut\u00fd spolu s\u00a0HTTP\/2, ale je to samostatn\u00fd \u0161tandard.<\/li><li><strong>Flow control<\/strong> \u2013 dotazy v\u00a0r\u00e1mci jedn\u00e9ho TCP spojenia je mo\u017en\u00e9 prioritizova\u0165.<\/li><li><strong>Server push<\/strong> \u2013 server sa vie za ur\u010dit\u00fdch okolnost\u00ed rozhodn\u00fa\u0165 posla\u0165 klientovi aj d\u00e1ta, ktor\u00e9 si nevy\u017eiadal.<\/li><\/ul>\n\n\n\n<p>Najv\u00e4\u010d\u0161ou zmenou je ur\u010dite zmena singleplexov\u00e9ho kan\u00e1la na mutliplexov\u00fd (ak by ste si mali o&nbsp;HTTP\/2 odnies\u0165 nejak\u00fd poznatok, tak je to ten tento). Ak ste niekedy sledovali vo v\u00fdvoj\u00e1rskych n\u00e1strojoch prehliada\u010da na\u010d\u00edtanie komplikovanej\u0161ej str\u00e1nky, mohli ste si v\u0161imn\u00fa\u0165, \u017ee sa deje v&nbsp;ur\u010dit\u00fdch skokoch. Na\u010d\u00edtaj\u00fa sa \u0161tyri dotazy, ke\u010f dobehn\u00fa, spustia sa \u010fal\u0161ie, a\u0165d. Graf, ktor\u00fd zobrazuje \u010dasy na\u010d\u00edtania pripom\u00edna \u0161ikm\u00fa plochu \u2013 nov\u00e9 dotazy sa spustia, a\u017e ke\u010f predch\u00e1dzaj\u00face skon\u010dia. A&nbsp;to nie je dobre.<\/p>\n\n\n\n<p>Tento probl\u00e9m sa ozna\u010duje n\u00e1zvom head-of-line blocking (alebo HOL blocking). Prehliada\u010de obmedzuj\u00fa mno\u017estvo paralelne otvoren\u00fdch spojen\u00ed na server (kv\u00f4li riziku pre\u0165a\u017eenia serverov). Ak si teda vyp\u00fdtaj\u00fa nejak\u00e9 s\u00fabory zo servera, mus\u00ed sa \u010daka\u0165, k\u00fdm sa tieto \u00fadaje stiahnu a&nbsp;potom sa p\u00fdtaj\u00fa \u010fal\u0161ie (pri\u010dom sa op\u00e4\u0165 pou\u017eije existuj\u00face TCP spojenie). V&nbsp;jednom TCP spojen\u00ed sa teda s\u0165ahuje len jeden s\u00fabor (singleplex) a&nbsp;po\u010det TCP spojen\u00ed je obmedzen\u00fd \u2013 a&nbsp;to je hlavn\u00e9 \u00fazke hrdlo HTTP 1.1.<\/p>\n\n\n\n<p>HTTP\/2 funguje inak. Sta\u010d\u00ed mu jedno TCP spojenie, a&nbsp;t\u00fdm paralelne za\u010dne s\u0165ahova\u0165 ve\u013ek\u00e9 mno\u017estvo \u00fadajov. Ka\u017ed\u00e1 po\u017eiadavka a&nbsp;ka\u017ed\u00e1 odpove\u010f je rozdelen\u00e1 na framy (alebo chunky), a&nbsp;tie s\u00fa postupne posielan\u00e9 cez TCP spojenie na server, pri\u010dom sa to deje naraz pre viacero s\u00faborov. Server potom z&nbsp;chunkov vysklad\u00e1 po\u017eiadavku, vypo\u010d\u00edta odpove\u010f a&nbsp;po\u0161le ju rovnak\u00fdm sp\u00f4sobom sp\u00e4\u0165.<\/p>\n\n\n\n<p>Aby toto mohol server robi\u0165, spr\u00e1vy na server a&nbsp;sp\u00e4\u0165 u\u017e nem\u00f4\u017eu by\u0165 uchovan\u00e9 ako oby\u010dajn\u00fd text (plain text), ale bin\u00e1rne. To je \u010fal\u0161ia zmena oproti HTTP 1.1. V\u010faka tomuto bolo tie\u017e mo\u017en\u00e9 zapracova\u0165 do protokolu komprim\u00e1ciu hlavi\u010diek. Okrem toho, multiplex so sebou prin\u00e1\u0161a \u0161k\u00e1lu mo\u017enost\u00ed (a niekedy aj \u0161k\u00e1lu probl\u00e9mov), ako je napr\u00edklad prioritiz\u00e1cia po\u017eiadaviek alebo riadenie flowu (akou kadenciou m\u00e1 server odpoveda\u0165 na po\u017eiadavky klientovi, aby ich ten st\u00edhal spracov\u00e1va\u0165).<\/p>\n\n\n\n<p>HTTP\/2 bol teda navrhnut\u00fd hlavne tak, aby zv\u00fd\u0161il v\u00fdkon. Z&nbsp;toho vypl\u00fdvaj\u00fa aj najv\u00e4\u010d\u0161ie zmeny oproti predch\u00e1dzaj\u00facej verzii. Z&nbsp;poh\u013eadu bezpe\u010dnosti stoj\u00ed za to zmieni\u0165, \u017ee HTTP\/2 vie komunikova\u0165 u\u017e len cez HTTPS \u2013 tak\u017ee aj bezpe\u010dnos\u0165 dostala nejak\u00e9 vylep\u0161enie.<\/p>\n\n\n\n<p>Bud\u00facnos\u0165 by bola \u017eiariv\u00e1 a&nbsp;HTTP\/2 by bol v\u0161ade, ak by tu neboli ist\u00e9 komplik\u00e1cie. HTTP\/2 vy\u017eaduje jeho znalos\u0165 na \u00farovni klienta aj servera. Klientske aplik\u00e1cie (v preva\u017enej v\u00e4\u010d\u0161ine prehliada\u010de) HTTP\/2 ovl\u00e1daj\u00fa u\u017e d\u00e1vno. So servermi je to trochu hor\u0161ie. Nie, \u017ee by podpora pre HTTP\/2 nebola zapracovan\u00e1 do najbe\u017enej\u0161\u00edch webov\u00fdch serveroch (Apache, nginx, IIS&#8230;), ale tie \u010dasto vyu\u017e\u00edvaj\u00fa \u010dasti OS, ktor\u00e9 implementuj\u00fa IP\/TCP technologick\u00fd z\u00e1sobn\u00edk. Tak\u017ee upgrade na HTTP\/2 skon\u010d\u00ed t\u00fdm, \u017ee je nutn\u00e9 aktualizova\u0165 niektor\u00e9 \u010dasti OS, a&nbsp;to u\u017e je n\u00e1ro\u010dnej\u0161ia \u010dinnos\u0165 ako si aktualizova\u0165 prehliada\u010d.<\/p>\n\n\n\n<p>Samotn\u00fa kapitolu probl\u00e9mov pri zav\u00e1dzan\u00ed HTTP\/2 tvoria tzv. middle boxy. To s\u00fa proxy, firewall-y a&nbsp;ak\u00e9ko\u013evek in\u00e9 sie\u0165ov\u00e9 prvky medzi klientom a&nbsp;severom, ktor\u00e9 pracuj\u00fa na \u00farovniach vy\u0161\u0161\u00edch ako je TCP. Oni toti\u017e tie\u017e m\u00f4\u017eu HTTP spr\u00e1vy kontrolova\u0165 alebo modifikova\u0165, a&nbsp;teda im musia rozumie\u0165. Ak nepoznaj\u00fa HTTP\/2, tak ich spr\u00e1vanie m\u00f4\u017ee by\u0165 nevypo\u010d\u00edtate\u013en\u00e9. A&nbsp;aktualizova\u0165 tieto sie\u0165ov\u00e9 prvky je niekedy komplikovanej\u0161ie ako aktualizova\u0165 servery.<\/p>\n\n\n\n<p>Ale v\u00fdvoj nekon\u010d\u00ed (a v&nbsp;IT to plat\u00ed dvojn\u00e1sobne), a&nbsp;v&nbsp;\u010dase ke\u010f toto p\u00ed\u0161em, je u\u017e na ceste HTTP\/3 (zatia\u013e ako draft). T\u00e1 je postaven\u00e1 na \u010fal\u0161om protokole, ktor\u00fd vznikol v&nbsp;dielni Googlu \u2013 QUICK. Ten so sebou prin\u00e1\u0161a e\u0161te viac zmien a&nbsp;tou hlavnou je, \u017ee namiesto TCP pou\u017e\u00edva UDP protokol. Ten je jednoduch\u0161\u00ed a&nbsp;negarantuje doru\u010denie. Tak\u017ee o&nbsp;t\u00fato garanciu sa po novom star\u00e1 HTTP\/3, ktor\u00fd to rob\u00ed efekt\u00edvnej\u0161ie ako TCP. Nie \u017ee by v\u00fdvoj TCP zastal, ale vo v\u0161eobecnosti plat\u00ed, \u017ee je \u013eah\u0161ie aktualizova\u0165 protokoly vo vy\u0161\u0161\u00edch vrstv\u00e1ch ako v&nbsp;t\u00fdch ni\u017e\u0161\u00edch. Tak\u017ee sa HTTP\/3 vybralo tou cestou, \u017ee bude r\u00fdchlej\u0161ie pou\u017ei\u0165 jednoduch\u00fd, ale zaveden\u00fd protokol a&nbsp;nad n\u00edm na \u010fal\u0161ej vrstve postavi\u0165 nov\u00fd, hoci komplikovanej\u0161\u00ed protokol. Ka\u017edop\u00e1dne ide o&nbsp;v\u00e4\u010d\u0161iu zmenu ako medzi HTTP 1.1 a&nbsp;HTTP\/2, tak\u017ee bude zauj\u00edmav\u00e9 sledova\u0165, ako ve\u013emi \u00faspe\u0161n\u00e1 bude.<\/p>","protected":false},"excerpt":{"rendered":"<p>HTTP je jedn\u00fdm zo\u00a0\u0161tandardov, na ktor\u00fdch stoj\u00ed internet. P\u00f4vodne vznikol, aby poskytoval dokumenty ulo\u017een\u00e9 na serveroch, dnes sa ale pou\u017e\u00edva okrem dokumentov aj na v\u00fdmenu \u00fadajov, a\u00a0to nie len medzi pou\u017e\u00edvate\u013eom a\u00a0serverom, ale aj medzi servermi navz\u00e1jom. V\u00fdhodou HTTP je jeho jednoduchos\u0165, ale z\u00e1rove\u0148 aj schopnos\u0165 prisp\u00f4sobi\u0165 sa. Svet IT ale neust\u00e1le napreduje a\u00a0na v\u0161etko [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-382","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=382"}],"version-history":[{"count":1,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/382\/revisions"}],"predecessor-version":[{"id":383,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/382\/revisions\/383"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}