HTTP – Jak funguje Internet

Než začneme pracovat s internetem – ať už tvorbou vlastních stránek, nebo komunikací s existujícími službami, pojďme si přiblížit, co vlastně ten internet je a jak funguje.

Internet je celosvětová síť počítačů. Je to spousta laptopů, stolních počítačů, malých blikajících krabiček i obrovských blikajících skříní, které jsou navzájem propojeny pomocí kabelů (nebo i bezdrátově).

Samozřejmě není každé zařízení propojené s každým jiným zařízením – tolik kabelů by se na Zemi těžko vešlo. Spousta zařízení – hlavně tzv. routery a switche – ale umí přeposílat zprávy mezi sebou tak, že každý počítač může komunikovat s každým jiným počítačem. (Aspoň teoreticky – reálně je komunikace omezená např. kvůli bezpečnosti.)

Funguje to podobně jako pošta: když pošlu balíček z Brna do Melbourne, nedostane se tam přímo. Balíček poputuje třeba vlakem do Prahy, pak letadlem do hlavní pošty v Austrálii a odtud náklaďákem do Melbourne, kde ho doručovatel donese až k domu příjemce. A k naplánování celé téhle cesty stačí napsat na obálku krátkou adresu.

Podobně cestují informace v internetu: z laptopu přes Wi-Fi do routeru, odtud kabelem k poskytovateli připojení, tlustším kabelem do české „páteřní sítě“, podmořským kabelem třeba do Ameriky… a nakonec k počítači, se kterým jsem chtěl komunikovat.

Většinou můj laptop takhle komunikuje se serverem, počítačem, který se stará o sdělování informací. Každou webovou stránku spravuje takový server.

Webové adresy

Jak taková komunikace vypadá si ukážeme na příkladu – co se stane, když do prohlížeče zadám tuhle adresu:

http://naucse.python.cz/lessons/fast-track/http/

Taková webová adresa – technicky zvaná URL (Uniform Resource Locator, „jednotná adresa zdroje“) přesně určuje, jak se má prohlížeč dostat k informacím, které má zobrazit.

http://naucse.python.cz/lessons/fast-track/http/

Začátek adresy, http://, je jméno protokolu (angl. protocol name). Protokol určuje způsob, jak se k daným informacím dostat. Protokolů existuje spousta, každý funguje trochu jinak a každý se používá na něco jiného: SMTP a POP pro e-mail, FTP pro přenos souborů, SSH pro ovládání počítačů. My se teď ale zaměříme na HTTP, který se typicky používá pro webové stránky.

Další část adresy, naucse.python.cz, je jméno serveru (angl. server name). Říká, kde prohlížeč najde dané informace.

Jméno serveru je jako poštovní adresa – existuje počítač, který se jmenuje naucse.python.cz, a každý internetový „pošťák“ ví, komu přeposlat zprávu, aby se k tomuto počítači nakonec dostala.

„Skutečná“ adresa počítače, tzv. IP adresa, je číselná – například 151.101.37.147 nebo 2a04:4e42:9::403. Existuje ale systém, jak jméno serveru na takovou IP adresu přeložit. Tenhle systém se jmenuje DNS a – abychom zůstali u přirovnání k poště – funguje podobně jako seznamy poštovních směrovacích čísel.

Poslední část URL, /lessons/fast-track/http/, je cesta (angl. path). Říká, co chceme od serveru dostat: jméno konkrétní webové stránky.

U jednodušších stránek to může být přímo jméno souboru, který má server uložený na disku – proto spousta adres na Webu končí příponou .html.

Požadavek a odpověď

K získání požadované stránky prohlížeč vytvoří požadavek (angl. request) – zprávu „Pošli mi prosím stránku /lessons/fast-track/http/“ – a pošle ho serveru naucse.python.cz.

Server požadavek dostane a vrátí odpověď (angl. response) – zprávu s obsahem dané stránky. Obsah je často webová stránka v jazyce HTML, který popisuje co na stránce je, kde jsou nadpisy a kde odstavce, jak má stránka vypadat, a tak dále. Ale v odpovědi může být místo stránky i cokoli jiného – obrázek, video, nebo jiná data.

Veškerá komunikace přes HTTP funguje právě takto: pošle se požadavek a přijde na něj odpověď.

A jak tyhle zprávy vypadají? Požadavek nějak takhle:

GET /lessons/fast-track/install/ HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: naucse.python.cz
User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0

První řádek říká serveru: prosím, pošli mi (GET) stránku /lessons/fast-track/install/ s použitím protokolu HTTP verze 1.1. Další řádky jsou hlavičky (angl. headers). Říkají například kdo se ptá (User-Agent) a jaký obsah očekává (Accept). Většina hlaviček je nepovinná.

Odpověď pak může vypadat takto:

HTTP/1.1 200 OK
Cache-Control: max-age=600
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 3127
Content-Type: text/html; charset=utf-8
Date: Tue, 20 Feb 2018 15:51:24 GMT
Last-Modified: Tue, 20 Feb 2018 15:20:08 GMT
Server: GitHub.com

<!doctype html>
  <html lang="cs">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <title>
                Python a jeho knihovny: HTTP – Jak funguje Internet
…

První řádek říká: používáme protokol HTTP verze 1.1, a všechno je v pořádku (200 OK). Kromě 200 existují i další stavové kódy (angl. status codes). Známý je např. 404 „nenalezeno“.

Následují opět hlavičky – např. kdo odpovídá (Server), kdy byla stránka naposledy změněna (Last-Modified) a jak je odpověď zakódovaná: Content-Type: text/html říká, že je to stránka v jazyce HTML.

Hlavičky jsou ukončené volným řádkem, po kterém následuje samotný obsah odpovědi ve zmíněném jazyce HTML.

HTTP Metody

Komunikace ukázaná výše používala metodu GET, která slouží ke čtení informací. Když se takto prohlížeč na nějakou stránku zeptá, nic se na serveru nezmění. Prohlížeč si takovou stránku – nebo třeba obrázek či video – může dočasně uložit, a když bude potřeba znovu, použít uloženou verzi.

Některými požadavky ale stav serveru mění: například se přihlásí uživatel, nakoupí zboží v e-shopu nebo odešle zpráva do diskuse. Tyto požadavky používají místo GET jinou metodu (angl. method). Co přesně která metoda na jaké adrese dělá, to záleží na autorovi stránek. Často se používají tyto metody:

  • GET načte informace,
  • POST pošle na server informace, např. z formuláře, s cílem něco změnit nebo nastavit,
  • PUT přidá novou stránku (nebo jiný objekt),
  • DELETE něco smaže.

Seznam všech metod je ve specifikaci.

U složitějších požadavků se dají na server poslat i informace: webové formuláře se odesílají požadavkem, který používá metodu POST a vyplněné informace k dotazu „přilepí“ za hlavičky – stejným způsobem, jako se v odpovědi posílá HTML stránka.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/brno-jaro-2019-ut:github-api:1",
      "title": "HTTP – Jak funguje Internet",
      "html": "\n          \n    \n\n    <h1>HTTP &#x2013; Jak funguje Internet</h1>\n<p>Ne&#x17E; za&#x10D;neme pracovat s&#xA0;internetem &#x2013; a&#x165; u&#x17E; tvorbou vlastn&#xED;ch str&#xE1;nek, nebo\nkomunikac&#xED; s&#xA0;existuj&#xED;c&#xED;mi slu&#x17E;bami, poj&#x10F;me si p&#x159;ibl&#xED;&#x17E;it, co vlastn&#x11B; ten\ninternet je a jak funguje.</p>\n<p>Internet je celosv&#x11B;tov&#xE1; s&#xED;&#x165; po&#x10D;&#xED;ta&#x10D;&#x16F;.\nJe to spousta laptop&#x16F;, stoln&#xED;ch po&#x10D;&#xED;ta&#x10D;&#x16F;, mal&#xFD;ch blikaj&#xED;c&#xED;ch krabi&#x10D;ek\ni obrovsk&#xFD;ch blikaj&#xED;c&#xED;ch sk&#x159;&#xED;n&#xED;, kter&#xE9; jsou navz&#xE1;jem propojeny pomoc&#xED;\nkabel&#x16F; (nebo i bezdr&#xE1;tov&#x11B;).</p>\n<p>Samoz&#x159;ejm&#x11B; nen&#xED; ka&#x17E;d&#xE9; za&#x159;&#xED;zen&#xED; propojen&#xE9; s&#xA0;ka&#x17E;d&#xFD;m jin&#xFD;m za&#x159;&#xED;zen&#xED;m &#x2013; tolik\nkabel&#x16F; by se na Zemi t&#x11B;&#x17E;ko ve&#x161;lo.\nSpousta za&#x159;&#xED;zen&#xED; &#x2013; hlavn&#x11B; tzv. <em>routery</em> a <em>switche</em> &#x2013; ale um&#xED; p&#x159;epos&#xED;lat\nzpr&#xE1;vy mezi sebou tak, &#x17E;e ka&#x17E;d&#xFD; po&#x10D;&#xED;ta&#x10D; m&#x16F;&#x17E;e komunikovat s&#xA0;ka&#x17E;d&#xFD;m\njin&#xFD;m po&#x10D;&#xED;ta&#x10D;em.\n(Aspo&#x148; teoreticky &#x2013; re&#xE1;ln&#x11B; je komunikace omezen&#xE1; nap&#x159;. kv&#x16F;li bezpe&#x10D;nosti.)</p>\n<p>Funguje to podobn&#x11B; jako po&#x161;ta: kdy&#x17E; po&#x161;lu bal&#xED;&#x10D;ek z Brna do Melbourne,\nnedostane se tam p&#x159;&#xED;mo.\nBal&#xED;&#x10D;ek poputuje t&#x159;eba vlakem do Prahy, pak letadlem do hlavn&#xED; po&#x161;ty\nv&#xA0;Austr&#xE1;lii a odtud n&#xE1;kla&#x10F;&#xE1;kem do Melbourne, kde ho doru&#x10D;ovatel donese a&#x17E;\nk&#xA0;domu p&#x159;&#xED;jemce.\nA k&#xA0;napl&#xE1;nov&#xE1;n&#xED; cel&#xE9; t&#xE9;hle cesty sta&#x10D;&#xED; napsat na ob&#xE1;lku kr&#xE1;tkou adresu.</p>\n<p>Podobn&#x11B; cestuj&#xED; informace v&#xA0;internetu: z&#xA0;laptopu p&#x159;es Wi-Fi do <em>routeru</em>,\nodtud kabelem k poskytovateli p&#x159;ipojen&#xED;, tlust&#x161;&#xED;m kabelem do &#x10D;esk&#xE9;\n&#x201E;p&#xE1;te&#x159;n&#xED; s&#xED;t&#x11B;&#x201C;, podmo&#x159;sk&#xFD;m kabelem t&#x159;eba do Ameriky&#x2026; a nakonec k&#xA0;po&#x10D;&#xED;ta&#x10D;i,\nse kter&#xFD;m jsem cht&#x11B;l komunikovat.</p>\n<p>V&#x11B;t&#x161;inou m&#x16F;j laptop takhle komunikuje se <em>serverem</em>, po&#x10D;&#xED;ta&#x10D;em, kter&#xFD;\nse star&#xE1; o sd&#x11B;lov&#xE1;n&#xED; informac&#xED;.\nKa&#x17E;dou webovou str&#xE1;nku spravuje takov&#xFD; server.</p>\n<p><a id=\"url-anatomy\"></a></p>\n<h2>Webov&#xE9; adresy</h2>\n<p>Jak takov&#xE1; komunikace vypad&#xE1; si uk&#xE1;&#x17E;eme na p&#x159;&#xED;kladu &#x2013;\nco se stane, kdy&#x17E; do prohl&#xED;&#x17E;e&#x10D;e zad&#xE1;m tuhle adresu:</p>\n<div class=\"highlight\"><pre><code>http://naucse.python.cz/lessons/fast-track/http/</code></pre></div><p>Takov&#xE1; webov&#xE1; adresa &#x2013; technicky zvan&#xE1; URL (<em>Uniform Resource Locator</em>,\n&#x201E;jednotn&#xE1; adresa zdroje&#x201C;) p&#x159;esn&#x11B; ur&#x10D;uje, jak se m&#xE1; prohl&#xED;&#x17E;e&#x10D; dostat\nk&#xA0;informac&#xED;m, kter&#xE9; m&#xE1; zobrazit.</p>\n<p><span class=\"figure\"><a href=\"/2019/brno-jaro-2019-ut/fast-track/http/static/url-anatomy.svg\"><img src=\"/2019/brno-jaro-2019-ut/fast-track/http/static/url-anatomy.svg\" alt=\"http://naucse.python.cz/lessons/fast-track/http/\"></a></span></p>\n<p>Za&#x10D;&#xE1;tek adresy, <code>http://</code>, je jm&#xE9;no <em>protokolu</em> (angl. <em>protocol name</em>).\nProtokol ur&#x10D;uje zp&#x16F;sob, <em>jak</em> se k&#xA0;dan&#xFD;m informac&#xED;m dostat.\nProtokol&#x16F; existuje spousta, ka&#x17E;d&#xFD; funguje trochu jinak a ka&#x17E;d&#xFD; se pou&#x17E;&#xED;v&#xE1;\nna n&#x11B;co jin&#xE9;ho:\nSMTP a POP pro e-mail, FTP pro p&#x159;enos soubor&#x16F;, SSH pro ovl&#xE1;d&#xE1;n&#xED; po&#x10D;&#xED;ta&#x10D;&#x16F;.\nMy se te&#x10F; ale zam&#x11B;&#x159;&#xED;me na HTTP, kter&#xFD; se typicky pou&#x17E;&#xED;v&#xE1; pro webov&#xE9; str&#xE1;nky.</p>\n<p>Dal&#x161;&#xED; &#x10D;&#xE1;st adresy, <code>naucse.python.cz</code>, je <em>jm&#xE9;no serveru</em> (angl. <em>server name</em>).\n&#x158;&#xED;k&#xE1;, <em>kde</em> prohl&#xED;&#x17E;e&#x10D; najde dan&#xE9; informace.</p>\n<p>Jm&#xE9;no serveru je jako po&#x161;tovn&#xED; adresa &#x2013; existuje po&#x10D;&#xED;ta&#x10D;, kter&#xFD; se jmenuje\n<code>naucse.python.cz</code>, a ka&#x17E;d&#xFD; internetov&#xFD; &#x201E;po&#x161;&#x165;&#xE1;k&#x201C; v&#xED;, komu p&#x159;eposlat zpr&#xE1;vu,\naby se k&#xA0;tomuto po&#x10D;&#xED;ta&#x10D;i nakonec dostala.</p>\n<div class=\"admonition note\"><p>&#x201E;Skute&#x10D;n&#xE1;&#x201C; adresa po&#x10D;&#xED;ta&#x10D;e, tzv. IP adresa, je &#x10D;&#xED;seln&#xE1; &#x2013; nap&#x159;&#xED;klad\n<code>151.101.37.147</code> nebo <code>2a04:4e42:9::403</code>.\nExistuje ale syst&#xE9;m, jak jm&#xE9;no serveru na takovou <em>IP adresu</em> p&#x159;elo&#x17E;it.\nTenhle syst&#xE9;m se jmenuje DNS a &#x2013; abychom z&#x16F;stali u p&#x159;irovn&#xE1;n&#xED; k&#xA0;po&#x161;t&#x11B; &#x2013;\nfunguje podobn&#x11B; jako seznamy po&#x161;tovn&#xED;ch sm&#x11B;rovac&#xED;ch &#x10D;&#xED;sel.</p>\n</div><p>Posledn&#xED; &#x10D;&#xE1;st URL, <code>/lessons/fast-track/http/</code>, je <em>cesta</em> (angl. <em>path</em>).\n&#x158;&#xED;k&#xE1;, <em>co</em> chceme od serveru dostat: jm&#xE9;no konkr&#xE9;tn&#xED; webov&#xE9; str&#xE1;nky.</p>\n<p>U jednodu&#x161;&#x161;&#xED;ch str&#xE1;nek to m&#x16F;&#x17E;e b&#xFD;t p&#x159;&#xED;mo jm&#xE9;no souboru, kter&#xFD; m&#xE1; server\nulo&#x17E;en&#xFD; na disku &#x2013; proto spousta adres na Webu kon&#x10D;&#xED; p&#x159;&#xED;ponou <code>.html</code>.</p>\n<h2>Po&#x17E;adavek a odpov&#x11B;&#x10F;</h2>\n<p>K&#xA0;z&#xED;sk&#xE1;n&#xED; po&#x17E;adovan&#xE9; str&#xE1;nky prohl&#xED;&#x17E;e&#x10D; vytvo&#x159;&#xED; <em>po&#x17E;adavek</em> (angl. <em>request</em>)\n&#x2013; zpr&#xE1;vu &#x201E;Po&#x161;li mi pros&#xED;m str&#xE1;nku <code>/lessons/fast-track/http/</code>&#x201C; &#x2013; a po&#x161;le ho\nserveru <code>naucse.python.cz</code>.</p>\n<p>Server po&#x17E;adavek dostane a vr&#xE1;t&#xED; <em>odpov&#x11B;&#x10F;</em> (angl. <em>response</em>) &#x2013; zpr&#xE1;vu\ns&#xA0;obsahem dan&#xE9; str&#xE1;nky.\nObsah je &#x10D;asto webov&#xE1; str&#xE1;nka v&#xA0;jazyce HTML, kter&#xFD; popisuje co na str&#xE1;nce je,\nkde jsou nadpisy a kde odstavce, jak m&#xE1; str&#xE1;nka vypadat, a tak d&#xE1;le.\nAle v&#xA0;odpov&#x11B;di m&#x16F;&#x17E;e b&#xFD;t m&#xED;sto str&#xE1;nky i cokoli jin&#xE9;ho &#x2013; obr&#xE1;zek, video, nebo\njin&#xE1; data.</p>\n<p>Ve&#x161;ker&#xE1; komunikace p&#x159;es HTTP funguje pr&#xE1;v&#x11B; takto: po&#x161;le se po&#x17E;adavek\na p&#x159;ijde na n&#x11B;j odpov&#x11B;&#x10F;.</p>\n<p>A jak tyhle zpr&#xE1;vy vypadaj&#xED;?\nPo&#x17E;adavek n&#x11B;jak takhle:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"nf\">GET</span> <span class=\"nn\">/lessons/fast-track/install/</span> <span class=\"kr\">HTTP</span><span class=\"o\">/</span><span class=\"m\">1.1</span>\n<span class=\"na\">Accept</span><span class=\"o\">:</span> <span class=\"l\">*/*</span>\n<span class=\"na\">Accept-Encoding</span><span class=\"o\">:</span> <span class=\"l\">gzip, deflate</span>\n<span class=\"na\">Connection</span><span class=\"o\">:</span> <span class=\"l\">keep-alive</span>\n<span class=\"na\">Host</span><span class=\"o\">:</span> <span class=\"l\">naucse.python.cz</span>\n<span class=\"na\">User-Agent</span><span class=\"o\">:</span> <span class=\"l\">Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0</span>\n</pre></div><p>Prvn&#xED; &#x159;&#xE1;dek &#x159;&#xED;k&#xE1; serveru: pros&#xED;m, po&#x161;li mi (<code>GET</code>) str&#xE1;nku\n<code>/lessons/fast-track/install/</code> s&#xA0;pou&#x17E;it&#xED;m protokolu <code>HTTP</code> verze <code>1.1</code>.\nDal&#x161;&#xED; &#x159;&#xE1;dky jsou <em>hlavi&#x10D;ky</em> (angl. <em>headers</em>).\n&#x158;&#xED;kaj&#xED; nap&#x159;&#xED;klad kdo se pt&#xE1; (<code>User-Agent</code>) a jak&#xFD; obsah o&#x10D;ek&#xE1;v&#xE1; (<code>Accept</code>).\nV&#x11B;t&#x161;ina hlavi&#x10D;ek je nepovinn&#xE1;.</p>\n<p>Odpov&#x11B;&#x10F; pak m&#x16F;&#x17E;e vypadat takto:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kr\">HTTP</span><span class=\"o\">/</span><span class=\"m\">1.1</span> <span class=\"m\">200</span> <span class=\"ne\">OK</span>\n<span class=\"na\">Cache-Control</span><span class=\"o\">:</span> <span class=\"l\">max-age=600</span>\n<span class=\"na\">Connection</span><span class=\"o\">:</span> <span class=\"l\">keep-alive</span>\n<span class=\"na\">Content-Encoding</span><span class=\"o\">:</span> <span class=\"l\">gzip</span>\n<span class=\"na\">Content-Length</span><span class=\"o\">:</span> <span class=\"l\">3127</span>\n<span class=\"na\">Content-Type</span><span class=\"o\">:</span> <span class=\"l\">text/html; charset=utf-8</span>\n<span class=\"na\">Date</span><span class=\"o\">:</span> <span class=\"l\">Tue, 20 Feb 2018 15:51:24 GMT</span>\n<span class=\"na\">Last-Modified</span><span class=\"o\">:</span> <span class=\"l\">Tue, 20 Feb 2018 15:20:08 GMT</span>\n<span class=\"na\">Server</span><span class=\"o\">:</span> <span class=\"l\">GitHub.com</span>\n\n<span class=\"cp\">&lt;!doctype html&gt;</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">html</span> <span class=\"na\">lang</span><span class=\"o\">=</span><span class=\"s\">&quot;cs&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">meta</span> <span class=\"na\">charset</span><span class=\"o\">=</span><span class=\"s\">&quot;utf-8&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">meta</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;viewport&quot;</span> <span class=\"na\">content</span><span class=\"o\">=</span><span class=\"s\">&quot;width=device-width, initial-scale=1, shrink-to-fit=no&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n                Python a jeho knihovny: HTTP &#x2013; Jak funguje Internet\n&#x2026;\n</pre></div><p>Prvn&#xED; &#x159;&#xE1;dek &#x159;&#xED;k&#xE1;: pou&#x17E;&#xED;v&#xE1;me protokol <code>HTTP</code> verze <code>1.1</code>,\na v&#x161;echno je v po&#x159;&#xE1;dku (<code>200 OK</code>).\nKrom&#x11B; <code>200</code> existuj&#xED; i dal&#x161;&#xED; <a href=\"https://en.wikipedia.org/wiki/List_of_HTTP_status_codes\">stavov&#xE9; k&#xF3;dy</a> (angl. <em>status codes</em>).\nZn&#xE1;m&#xFD; je nap&#x159;. <code>404</code> &#x201E;nenalezeno&#x201C;.</p>\n<p>N&#xE1;sleduj&#xED; op&#x11B;t hlavi&#x10D;ky &#x2013; nap&#x159;. kdo odpov&#xED;d&#xE1; (<code>Server</code>), kdy byla str&#xE1;nka\nnaposledy zm&#x11B;n&#x11B;na (<code>Last-Modified</code>) a jak je odpov&#x11B;&#x10F; zak&#xF3;dovan&#xE1;:\n<code>Content-Type: text/html</code> &#x159;&#xED;k&#xE1;, &#x17E;e je to str&#xE1;nka v&#xA0;jazyce HTML.</p>\n<p>Hlavi&#x10D;ky jsou ukon&#x10D;en&#xE9; voln&#xFD;m &#x159;&#xE1;dkem, po kter&#xE9;m n&#xE1;sleduje samotn&#xFD; obsah\nodpov&#x11B;di ve zm&#xED;n&#x11B;n&#xE9;m jazyce HTML.</p>\n<h2>HTTP Metody</h2>\n<p>Komunikace uk&#xE1;zan&#xE1; v&#xFD;&#x161;e pou&#x17E;&#xED;vala metodu <code>GET</code>, kter&#xE1; slou&#x17E;&#xED; ke <em>&#x10D;ten&#xED;</em>\ninformac&#xED;.\nKdy&#x17E; se takto prohl&#xED;&#x17E;e&#x10D; na n&#x11B;jakou str&#xE1;nku zept&#xE1;, nic se na serveru nezm&#x11B;n&#xED;.\nProhl&#xED;&#x17E;e&#x10D; si takovou str&#xE1;nku &#x2013; nebo t&#x159;eba obr&#xE1;zek &#x10D;i video &#x2013; m&#x16F;&#x17E;e do&#x10D;asn&#x11B;\nulo&#x17E;it, a kdy&#x17E; bude pot&#x159;eba znovu, pou&#x17E;&#xED;t ulo&#x17E;enou verzi.</p>\n<p>N&#x11B;kter&#xFD;mi po&#x17E;adavky ale stav serveru m&#x11B;n&#xED;: nap&#x159;&#xED;klad se p&#x159;ihl&#xE1;s&#xED; u&#x17E;ivatel,\nnakoup&#xED; zbo&#x17E;&#xED; v&#xA0;e-shopu nebo ode&#x161;le zpr&#xE1;va do diskuse.\nTyto po&#x17E;adavky pou&#x17E;&#xED;vaj&#xED; m&#xED;sto <code>GET</code> jinou <em>metodu</em> (angl. <em>method</em>).\nCo p&#x159;esn&#x11B; kter&#xE1; metoda na jak&#xE9; adrese d&#x11B;l&#xE1;, to z&#xE1;le&#x17E;&#xED; na autorovi str&#xE1;nek.\n&#x10C;asto se pou&#x17E;&#xED;vaj&#xED; tyto metody:</p>\n<ul>\n<li><code>GET</code> na&#x10D;te informace,</li>\n<li><code>POST</code> po&#x161;le na server informace, nap&#x159;. z&#xA0;formul&#xE1;&#x159;e, s&#xA0;c&#xED;lem n&#x11B;co\nzm&#x11B;nit nebo nastavit,</li>\n<li><code>PUT</code> p&#x159;id&#xE1; novou str&#xE1;nku (nebo jin&#xFD; objekt),</li>\n<li><code>DELETE</code> n&#x11B;co sma&#x17E;e.</li>\n</ul>\n<p>Seznam v&#x161;ech metod je ve\n<a href=\"https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html\">specifikaci</a>.</p>\n<p>U slo&#x17E;it&#x11B;j&#x161;&#xED;ch po&#x17E;adavk&#x16F; se daj&#xED; na server poslat i informace:\nwebov&#xE9; formul&#xE1;&#x159;e se odes&#xED;laj&#xED; po&#x17E;adavkem, kter&#xFD; pou&#x17E;&#xED;v&#xE1; metodu <code>POST</code>\na vypln&#x11B;n&#xE9; informace k&#xA0;dotazu &#x201E;p&#x159;ilep&#xED;&#x201C; za hlavi&#x10D;ky &#x2013; stejn&#xFD;m zp&#x16F;sobem, jako se\nv&#xA0;odpov&#x11B;di pos&#xED;l&#xE1; HTML str&#xE1;nka.</p>\n\n\n        "
    }
  }
}