Prezentace / Lekce 5 – Klient–server, web a bezpečnost
1 / 10
Lekce 05 · 45 min · T/P 40 / 60

Mezi Tebouwebem probíhá neustálý dialog

Jakmile stiskneš po zadání URL v prohlížeči Enter, prohlížeč odešle požadavek a čeká na odpověď. Dnes se na tento proces podíváme podrobněji. Rozebereme fungování moderního webu od protokolů HTTP/3 a QUIC přes zabezpečení pomocí TLS 1.3 a DoH až po stavové firewally a WireGuard. Nakonec se zaměříme na propojení s šestou lekcí, tedy s databázemi.

Učební výstup
Chápat moderní HTTP(S)
Návaznost
Lekce 3 a 4 (protokoly, cmd)
Další lekce
Lekce 6 – databáze
Úvodní otázka. Co se stane hned poté, kdy v prohlížeči napíšeš seznam.cz a zmáčkneš Enter?
Na závěr Tě čeká řešení: Rozhodovací úloha 5× stavový kód · DevTools nad stabilní stránkou · 8 otázek v kvízu.
01 · Model

Klient žádá, server odpovídá

Počítače na internetu mohou zastávat dvě různé role: klientGGlosářWWikipedie CS (iniciuje žádost) a server (čeká na ni). Prohlížeč je klient, seznam.cz je server. Konverzaci vždy začíná klient.

Klient prohlížeč Firefox · Chrome REQUEST: GET /index.html RESPONSE: 200 OK + HTML Server webový stroj nginx · Caddy · CDN
Vždy dvojice request + response. Server nikdy nezačíná sám – čeká na žadatele.
Klient

Prohlížeč, mobilní aplikace, IoTGGlosářWWikipedie CS zařízení, CLIGGlosářWWikipedie CS nástroj (curlGGlosářWWikipedie CS), skript, jiný server. Cokoli, co iniciuje.

Server

Program běžící na stroji (nebo spíš na desítkách strojů v CDNGGlosářWWikipedie CSCloudflareGGlosářWWikipedie CS, FastlyGGlosářWWikipedia EN). Nikdy se nevypíná, čeká na klienty.

02 · Požadavek

Co přesně prohlížeč posílá

HTTP request je obyčejný text. Metoda + cesta + hlavičky. GET a POST stačí pro 95 % webu; PUT/DELETE použijí programátoři v API.

GET /hledat?q=pocasi HTTP/2    – první řádek (method, path, version)
Host: seznam.cz
User-Agent: Mozilla/5.0 (Windows NT 10.0) Chrome/130
Accept: text/html,application/xhtml+xml
Accept-Language: cs-CZ,cs;q=0.9
Accept-Encoding: gzip, br
Cookie: session=abc123; theme=dark
Connection: keep-alive

Nejčastější metody

„Chci si přečíst." Načítá stránku, obrázek, data. Parametry v URLGGlosářWWikipedie CS (?q=pocasi). Nemá tělo. Nemění stav.

„Chci něco poslat / vytvořit." Formuláře, nahrávání. Má tělo (data). Mění stav na serveru.

Mikroúkol. Když zadáš do Googlu hledaný výraz a zmáčkneš Enter – je to GET nebo POST? (Odpověď: GET. Proto vidíš ?q=… v URL – a proto jdou zakopírovat do odkazu.)
Pokročilé pro programátory. Pro REST API existují i příkazy PUT (update), DELETE (smazání) a PATCH (částečná úprava). Pro klasický web webu stačí GET a POST.
03 · Odpověď

Co server vrací – a co znamenají čísla

Každá odpověď začíná stavovým kódemGGlosářWWikipedie CS – třímístným číslem v rodině 1xx / 2xx / 3xx / 4xx / 5xx.

HTTP/2 200
content-type: text/html; charset=utf-8
content-length: 14327
date: Sat, 19 Apr 2026 10:15:22 GMT
cache-control: max-age=300
set-cookie: session=xyz789; HttpOnly; Secure; SameSite=Lax
server: nginx

<!DOCTYPE html>
<html><head><title>Seznam</title>...

7 kódů, které potkáš denně

Kód Význam Kontext
200 OKÚspěchstránka se načetla
301 MovedTrvalé přesměrováníweb se přestěhoval (SEO-friendly)
304 Not ModifiedObsah z cacheprohlížeč má aktuální verzi
401 UnauthorizedNepřihlášenserver neví, kdo jsi – přihlaš se
403 ForbiddenPřihlášen, ale zakázánovíme kdo jsi, ale sem nesmíš
404 Not FoundStránka neexistujepřeklep v URL, chybný odkaz
500 Server ErrorChyba serveruspadla aplikace, bug v kódu
401 vs 403 – klíčový rozdíl.
401 = „kdo jsi?" – server tě nezná. Řešení: přihlásit se.
403 = „já tě znám, ale sem nemůžeš." – účet nemá oprávnění. Řešení: kontaktovat admina.
04 · Moderní web

HTTP existuje ve třech stále používaných verzích

V DevTools → Network sloupec Protocol ukáže http/1.1, h2, nebo h3. Každá verze má jiné vlastnosti a jinou „stack" pod sebou.

HTTP/1.1 (1997)
  • Textový, čitelný očima.
  • Jedno TCP spojení = jeden request najednou.
  • Mnoho requestů = mnoho TCP spojení.
  • Stack: HTTP → TCP → IP.
DevTools: http/1.1
HTTP/2 (2015)
  • Binární (rychlejší ke zpracování).
  • Multiplex: víc requestů paralelně v jednom spojení.
  • Server push (server může poslat data, o která klient nestihl požádat).
  • Stack: HTTP/2 → TLS → TCP → IP.
DevTools: h2
HTTP/3 (2022)
  • Nad QUIC nad UDP (ne TCP).
  • Rychlé navázání (0-RTT).
  • Connection migration – přechod z wifi na mobilní data bez přerušení spojení.
  • Stack: HTTP/3 → QUIC → UDP → IP.
DevTools: h3

Proč HTTP/3 zneplatňuje OSI model

HTTP/1.1 & HTTP/2 HTTP TLS (jen HTTPS) TCP IP HTTP/3 – nový stack HTTP/3 QUIC (TLS 1.3 + transport) UDP IP
QUIC v HTTP/3 sdružuje funkce TLS a transportu – vrstvy od sebe nejsou odděleny ve smyslu OSI modelu. Moderní realita tak klasický 7-vrstvý model odsouvá do historie.
Vyzkoušej. Otevři youtube.com → F12 → Network → Ctrl+R. V sloupci Protocol uvidíš h3. Google a Cloudflare dnes provozují velkou část webu na HTTP/3.
05 · Bezpečnost

HTTPS – šifrování přes TLS 1.3

HTTPS = HTTP nad TLSGGlosářWWikipedie CS. TLS 1.3 (2018, dnes standard) zajišťuje tři věci: důvěrnost (nikdo na cestě nevidí obsah), integritu (nikdo obsah nezmění) a autenticitu (mluvíš s tím, s kým chceš).

HTTP (port 80)
  • Otevřený text – majitel wifi v kavárně vidí vše.
  • Lze upravovat za běhu.
  • Prohlížeče píšou „Nezabezpečeno".
HTTPS (port 443)
  • Šifrováno – nikdo na cestě data bez dešifrování nepřečte.
  • CertifikátGGlosářWWikipedie CS ověří identitu serveru.
  • Moderní standard (Chrome/Firefox varují před HTTP).

TLS 1.3 handshake – 1 RTTGGlosářWWikipedia EN

Dřívější TLS 1.2 potřeboval 2 round-trips před první datovou zprávou. TLS 1.3 to zkrátil na jeden. S 0-RTT session resumption dokáže poslat data rovnou v první zprávě (pokud klient už server zná). V generaci TLS 1.2 si klient a server museli vyměnit více zpráv, než si začali důvěřovat.

  • Round-trip: Klient pozdraví (ClientHello), server odpoví, pošle certifikát a vybere šifrovací algoritmy.
  • Round-trip: Proběhne výměna klíčů a potvrzení, že šifrování funguje (Finished).
  • Výsledek: Teprve poté může klient poslat první požadavek (např. GET /index.html). To znamená velké zpoždění, zejména na pomalých mobilních sítích.

  • 1. Klient → Server: ClientHello (nabízené šifry, veřejný klíč)
    2. Server → Klient: ServerHello + Certifikát + hotovo
    3. Klient → Server: šifrovaný GET /index.html
    ^^^ první datový request – 1 RTT od začátku

Chain of trust – komu prohlížeč věří

Certifikát seznam.cz vlastnictví domény podepsáno Intermediate CA „Let's Encrypt R3" podepsáno Root CA důvěra v OS / prohlížeči
Řetěz: server cert → intermediate CA → root CA. Root CA je v seznamu důvěryhodných autorit v OS/prohlížeči. Pokud kterýkoli článek selže, TLS handshake ztroskotá.

Lidsky řečeno: certifikát je něco jako digitální občanka serveru. Když se prohlížeč připojí na seznam.cz, dostane od něj tuto „občanku" — uvnitř je název domény, veřejný klíč serveru a podpis vystavovatele. Otázka zní: kdo ten podpis vydal a proč by mu měl prohlížeč věřit?

Certifikát serveru podepisuje Intermediate CA (mezičlánková autorita, např. „Let's Encrypt R3"). Tu zase podepisuje Root CA (kořenová autorita). A právě seznam Root CA má prohlížeč nebo operační systém už předem v sobě — tvůrci Windows, macOS, Androidu, Firefoxu nebo Chromu ho pečlivě vybrali (typicky 100–150 organizací po celém světě). Komukoli z tohoto seznamu prohlížeč věří „bez dalšího ptaní".

Jak ověření probíhá (3 kroky):

  1. Prohlížeč přečte certifikát serveru a pomocí veřejného klíče Intermediate CA ověří jeho podpis.
  2. Stejný postup pro certifikát Intermediate CA — jeho podpis ověří veřejným klíčem Root CA.
  3. Root CA musí být v předem nainstalovaném seznamu důvěryhodných kořenů. Pokud ano, řetěz je uzavřen a spojení důvěryhodné.

Proč ten mezičlánek (intermediate)? Kvůli bezpečnosti. Root CA má nejcennější soukromý klíč — drží ho offline v hardwarovém trezoru a používá ho jen několikrát do roka. Denní podepisování milionů serverových certifikátů dělají méně chráněné Intermediate CA. Když se některá intermediate kompromituje, vyřadí se jen ona — kořen i ostatní intermediate fungují dál.

Když řetěz pukne (vypršelý certifikát, neznámá autorita, špatný podpis kterékoli ze tří úrovní), prohlížeč zobrazí varování „Vaše spojení není soukromé" a dovnitř vás nepustí. Reálnou ukázku takového výpadku najdeš hned níže.

Real-world příklad – Let's Encrypt 2021. Na konci září 2021 vypršel root certifikát „DST Root CA X3" Let's Encrypt. Staré systémy (Android < 7, některé IoT) ho měly v databázi jako jediný důvěryhodný – a najednou ztratily přístup k polovině internetu. Oprava vyžadovala update OS. Demonstruje to, jak je chain of trust skutečnou konstrukcí, ne abstraktem.
Mikroúkol. V prohlížeči klikni na zámek vedle URL → detaily certifikátu → záložka „Cesta certifikátu" (nebo „Details" → „Certification Path"). Uvidíš řetěz: server → intermediate → root.
06 · Paměť na tebe

Cookies – malé soubory, velké důsledky

HTTP je bezstavový – server si mezi requesty sám nic nepamatuje. CookiesGGlosářWWikipedie CS tuto mezeru zaplňují: server pošle text (session=abc123), prohlížeč ho uloží a u každého dalšího requestu ho pošle zpět.

Prohlížeč 1. POST /login (jméno, heslo) 2. Set-Cookie: session=abc; HttpOnly; Secure Server
Po přihlášení server pošle session cookie. Prohlížeč ji pak automaticky posílá u každého dalšího requestu na stejnou doménu.

Atributy cookie (moderní set)

HttpOnlyJS na stránce ke cookies nemá přístup. Chrání před XSS (Cross-Site Scripting) – bezpečnostní zranitelnost, při které útočník „podstrčí“ škodlivý kód, nejčastěji JavaScript, do webové stránky, kterou si prohlíží jiný uživatel.
SecureCookie se posílá jen přes HTTPS, nikdy HTTP.
SameSiteStrict/Lax/None – jak se chová u cross-site requestů. Chrání před CSRF (Cross-Site Request Forgery) – česky „podvržení požadavku mezi stránkami“, je útok, který zneužívá důvěru webu k vašemu prohlížeči. Útočník vás přiměje provést akci na webu, kde jste již přihlášeni (např. v bance nebo na Facebooku), aniž byste o tom věděli.
DomainKterá doména má cookie dostávat (např. .seznam.cz pokrývá všechny subdomény).
PathKterá cesta URL ji má dostávat (např. /admin jen pro admin část).
Expires / Max-AgeKdy vyprší. Bez toho = session cookie (smazaná při zavření prohlížeče).
PartitionedNovinka (CHIPS, 2024) – izoluje third-party cookies per-site. Součást řešení pro cookie-less web.

Útoky, před nimiž atributy chrání

XSS (Cross-Site Scripting)

Útočník vloží <script> do stránky (např. přes komentář). Jeho kód pak běží v prohlížeči oběti a může ukrást cookie. HttpOnly mu přístup znemožní.

CSRF (Cross-Site Request Forgery)

Útočník na své stránce vytvoří skrytý formulář, který posílá request na tvou banku. Prohlížeč automaticky přiloží tvé cookies → banka si myslí, že potvrzuješ platbu. SameSite Strict/Lax to blokuje.

Proto ty „cookie lišty". EU požaduje rozlišení: esenciální (přihlášení – bez souhlasu) vs. analytické/reklamní (vyžadují opt-in). Technicky je to stejný mechanismus, politicky jde o soukromí.
07 · Ochrana a soukromí

Firewall, VPN, DoH – tři moderní nástroje

Nepleť si je. Každý řeší jinou část.

Filtr paketů. Moderní firewall je stavový – pamatuje si navázaná TCP spojení a propouští odpovědi automaticky.

  • Windows Defender Firewall
  • Firewall na routeru chrání LAN
  • Aplikační firewall rozumí HTTP (blokuje SQL injection, XSS)

Šifrovaný tunel mezi tvým PC a vzdáleným serverem. Navenek to vypadá, že „sedíš“ přímo u toho serveru.

DoH (DNS over HTTPS)

Šifrované DNS dotazy. Prohlížeč se ptá DNS serveru přes HTTPS (port 443), ne přes klasický UDP 53.

  • Firefox, Chrome jej mají defaultně
  • ISP nevidí, jaké domény žádáš
  • Komplikuje firemní filtrování
Rozlišuj co dělají.
Firewall blokuje nežádoucí provoz.
VPN maskuje tvou polohu a šifruje provoz.
DoH šifruje jen DNS dotazy (ne samotná data).

Návaznost na další lekci (6)

Databáze = další server, kterému se posílá dotaz

Všechno, co bylo probráno v rámci této lekce, platí i pro databáze. Webový server sám je klient databáze. Když ti pošle stránku „nejnovější články", za kulisou odeslal databázi dotaz: SELECT * FROM posts ORDER BY created_at DESC LIMIT 10;

V následující šesté lekci obejdeme prohlížeš a budeme komunikovat přímo s databází v SQLGGlosářWWikipedie CS.

08 · Rozhodovací úloha + cvičení · 15 min

Jaký stavový kód bys vrátil?

5 scénářů ze života webového serveru. U každého vyber nejvhodnější HTTP kód – který reálně odpovídá situaci, ne jen „nějaký 4xx".

Scénář 1
zvol kód
Uživatel napsal URL s překlepem – /aboutt místo /about. Cesta na serveru neexistuje.
  • A
    200 OK (pošli prázdnou stránku)
  • B
    404 Not Found
  • C
    500 Server Error
  • D
    403 Forbidden
Scénář 2
zvol kód
Nepřihlášený uživatel se pokouší otevřít /muj-ucet.
  • A
    404 Not Found
  • B
    403 Forbidden
  • C
    401 Unauthorized
  • D
    500 Server Error
Scénář 3
zvol kód
Přihlášený žák (nikoli admin) se snaží otevřít /admin/users. Cesta existuje, ale potřebuje práva admina.
  • A
    401 Unauthorized
  • B
    403 Forbidden
  • C
    404 Not Found
  • D
    500 Server Error
Scénář 4
zvol kód
Web se přestěhoval z old.cz na new.cz. Chceme, aby prohlížeče (i Google) věděly, že je to trvalé.
  • A
    301 Moved Permanently
  • B
    200 OK (pošli rovnou novou stránku)
  • C
    404 Not Found
  • D
    500 Server Error
Scénář 5
zvol kód
Kód aplikace vyhodil výjimku (např. chyba v SQL dotazu), request se nezpracoval.
  • A
    404 Not Found
  • B
    403 Forbidden
  • C
    500 Internal Server Error
  • D
    301 Moved Permanently

DevTools – podívej se pod kapotu

Postup

  1. Otevři https://cs.wikipedia.org (stabilní, bez školních filtrů).
  2. F12 (nebo Ctrl + Shift + I) → záložka NetworkCtrl+R.
  3. Klikni na první řádek (HTML stránky), záložka Headers.
  4. Ve sloupci Protocol najdi verzi HTTP (h2, h3 nebo http/1.1).
1. Jakou metodu a stavový kód má první request?
např. GET 200
2. Jakou verzi HTTP server použil?
sloupec „Protocol": h2, h3 nebo http/1.1
3. Kolik celkem requestů stránka načte?
dole v DevTools: počet requestů
4. Najdi request s jiným kódem než 200. Jaký kód a co to znamená?
např. 304 (z cache) nebo 301 (přesměrování)
5. Klik na zámek vedle URL → detaily certifikátu. Kdo ho vystavil (Issuer)?
např. „Let's Encrypt" nebo „DigiCert"
09 · Ověření

Souhrnný kvíz – 8 otázek

Otázka 1 · ABCD
1 správná
Které tvrzení o HTTP je správné?
  • A
    HTTP si pamatuje historii uživatele
  • B
    HTTP je bezstavový – bez cookies si server nepamatuje předchozí request
  • C
    HTTP šifruje komunikaci
  • D
    HTTP běží na portu 443
Otázka 2 · ABCD
1 správná
Na jakém transportu běží HTTP/3?
  • A
    TCP
  • B
    IPX
  • C
    QUIC nad UDP
  • D
    ICMP
Otázka 3 · ABCD
1 správná
Jaký je rozdíl mezi stavovým kódem 401 a 403?
  • A
    401 = klient, 403 = server
  • B
    401 = nevíme kdo jsi (přihlas se), 403 = víme kdo jsi, ale sem nemůžeš
  • C
    401 je 5 let starší
  • D
    Jsou totožné
Otázka 4 · ABCD
1 správná
Kdo vydává TLS certifikát a jak prohlížeč ověří, že je důvěryhodný?
  • A
    Majitel domény sám
  • B
    Poskytovatel internetu
  • C
    Prohlížeč vydá vlastní
  • D
    Certifikační autorita (CA) podepíše certifikát, prohlížeč ověří chain of trust vůči root CA
Otázka 5 · Multi-select
vyber všechny správné
Které atributy cookie zvyšují bezpečnost?
  • HttpOnly
  • Secure
  • SameSite
  • „Cookie lišta"
Otázka 6 · ABCD
1 správná
Který atribut cookie chrání před XSS útokem?
  • A
    Secure
  • B
    HttpOnly
  • C
    SameSite
  • D
    Domain
Otázka 7 · ABCD
1 správná
Který VPN protokol je dnes moderní default?
  • A
    PPTP
  • B
    IPSec
  • C
    WireGuard
  • D
    L2TP
Otázka 8 · ABCD
1 správná
Co dělá DoH (DNS over HTTPS)?
  • A
    Šifruje DNS dotazy tak, že je nikdo na cestě nevidí
  • B
    Nahrazuje DNS decentralizovaně přes blockchain
  • C
    Blokuje škodlivé domény
  • D
    Zrychluje DNS dotazy oproti UDP