HTTP bez záhad: požiadavky, odpovede a stavové kódy

Ukážka HTTP požiadavky a odpovede, päť tried stavových kódov 1xx až 5xx s príkladmi a časová os verzií HTTP od 0.9 po 3
Grafika: WWWN (vlastné dielo)




Každý obrázok, každý štýl aj každý článok, ktorý čítate, prišiel do prehliadača ako odpoveď na otázku v jazyku HTTP. Je to jeden z mála internetových protokolov, ktoré si človek dokáže prečítať aj bez nástrojov – je textový, stručný a po rokoch používania až prekvapivo logický. Kto ho raz pochopí, rozumie polovici problémov, s ktorými sa na webe stretáva.

Otázka a odpoveď, nič viac

HTTP (Hypertext Transfer Protocol) funguje na princípe požiadavka – odpoveď. Klient, zvyčajne prehliadač, pošle požiadavku. Server odpovie. Spojenie samo o sebe nič nepamätá: každá požiadavka musí niesť všetko, čo server potrebuje vedieť. Hovorí sa tomu bezstavovosť. Ak si server má pamätať, že ste prihlásení, musí si prehliadač tú informáciu nosiť so sebou – najčastejšie v cookie.

Celú cestu od zadania adresy po zobrazenie stránky rozoberáme v článku Čo sa stane od zadania adresy po zobrazenie stránky.

Takto vyzerá jednoduchá požiadavka v podobe HTTP/1.1:

GET /historia-webu/ HTTP/1.1
Host: worldwideweb.sk
Accept-Language: sk,cs;q=0.8
Accept-Encoding: gzip, br

Prvý riadok obsahuje metódu, cestu a verziu. Nasledujú hlavičky. Hlavička Host je povinná, pretože na jednej IP adrese dnes bežne beží desiatky webov a server musí vedieť, ktorý z nich chcete. A odpoveď:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Cache-Control: max-age=600
Content-Encoding: br

<!doctype html>…

Metódy: čo od servera chcem

Norma RFC 9110 definuje osem metód. V bežnom živote stretnete hlavne tieto:

  • GET – daj mi zdroj. Najčastejšia metóda, prehliadač ju používa pri každom kliknutí na odkaz.
  • POST – spracuj tieto dáta. Odoslanie formulára, objednávka, komentár.
  • PUT a DELETE – nahraď, resp. odstráň zdroj. Typické pre API, napríklad REST rozhranie WordPressu.
  • HEAD – to isté ako GET, ale bez tela. Hodí sa na kontrolu, či stránka existuje.
  • OPTIONS – aké možnosti má tento zdroj. Prehliadač ho posiela pri kontrolách CORS.

Dôležité sú dve vlastnosti. Bezpečná metóda (GET, HEAD, OPTIONS) nemá nič meniť. Idempotentná metóda (okrem bezpečných aj PUT a DELETE) má rovnaký výsledok, či ju pošlete raz alebo päťkrát. POST idempotentná nie je – preto sa prehliadač pri obnovení stránky po odoslaní formulára pýta, či ho naozaj chcete poslať znova. Z praxe: ak niekto spraví odkaz „zmazať“ ako obyčajné GET, skôr či neskôr mu obsah zmaže vyhľadávací robot, ktorý odkazy len prechádza.

Stavové kódy: odpoveď v troch čísliciach

Prvá číslica kódu určuje triedu:

  • 1xx – informačné. Napríklad 103 Early Hints, ktorým server prehliadaču napovie, čo si môže začať sťahovať, ešte kým odpoveď pripraví.
  • 2xx – úspech. 200 OK, 201 Created, 204 No Content.
  • 3xx – presmerovanie. 301 je trvalé (vyhľadávače si zapamätajú novú adresu), 302 dočasné, 304 Not Modified hovorí „verzia, ktorú máš v cache, je stále aktuálna“.
  • 4xx – chyba na strane klienta. 404 Not Found, 403 Forbidden, 401 Unauthorized (napriek názvu znamená „neoverený“), 429 Too Many Requests.
  • 5xx – chyba na strane servera. 500 je všeobecná, 502 a 504 zvyčajne znamenajú, že sprostredkovateľ (napríklad CDN) sa nedohovoril so serverom za ním, 503 je dočasná nedostupnosť.

Postreh z prevádzky webov: najzradnejšia je stránka, ktorá zobrazí „Stránka neexistuje“, ale vráti kód 200. Pre človeka je to chyba, pre vyhľadávač plnohodnotná stránka. Google takéto prípady označuje ako „soft 404“ a oplatí sa ich v Search Console hľadať.

Hlavičky robia väčšinu práce

Telo odpovede je obsah, ale správanie webu určujú hlavičky. Content-Type hovorí, či ide o HTML, obrázok alebo JSON. Cache-Control rozhoduje, ako dlho si prehliadač či CDN môže odpoveď ponechať. Set-Cookie ukladá cookies. Location pri presmerovaní nesie novú adresu. Bezpečnostné hlavičky ako Strict-Transport-Security alebo Content-Security-Policy obmedzujú, čo prehliadač smie urobiť. Ak chcete vedieť, ako je nejaký web nastavený, hlavičky vám o ňom povedia viac než zdrojový kód stránky.

Cache: najrýchlejšia požiadavka je tá, ktorá sa nepošle

HTTP má od začiatku zabudovanú myšlienku, že odpoveď sa dá použiť opakovane. Server v hlavičke Cache-Control určí, ako dlho je odpoveď „čerstvá“ – napríklad max-age=600 znamená desať minút. Počas tejto doby prehliadač na server vôbec nejde. Keď čas uplynie, nemusí sťahovať všetko znova: pošle podmienenú požiadavku s hlavičkou If-None-Match (obsahuje značku ETag z predchádzajúcej odpovede) alebo If-Modified-Since. Ak sa nič nezmenilo, server odpovie krátkym 304 Not Modified bez tela. Pri obrázkoch a štýloch je to obrovská úspora. Opačný problém poznáte z praxe tiež: upravíte CSS a návštevníci stále vidia staré, pretože ho majú v cache. Preto sa k súborom pridáva verzia do názvu alebo parametra.

Od jedného riadku po QUIC

Prvá verzia, dnes nazývaná HTTP/0.9, vznikla v CERN-e v rokoch 1990–1991 spolu s prvým webovým serverom Tima Bernersa-Leeho. Poznala jedinú metódu GET, žiadne hlavičky a vracala len HTML. HTTP/1.0 (RFC 1945, 1996) pridal hlavičky, stavové kódy a iné typy obsahu ako HTML. HTTP/1.1 (prvýkrát RFC 2068 v roku 1997) priniesol trvalé spojenia, povinnú hlavičku Host a lepšiu prácu s cache – a vydržal ako hlavná verzia takmer dve desaťročia.

HTTP/2 (RFC 7540, 2015, dnes RFC 9113) zachoval význam správ, ale zmenil spôsob prenosu: namiesto textu binárne rámce a viac súbežných požiadaviek v jednom spojení. HTTP/3 (RFC 9114, 2022) presunul HTTP z TCP na QUIC, ktorý beží nad UDP. Stratený paket tak zdrží len jeden prúd dát, nie všetky naraz, čo pomáha najmä na mobilných sieťach.

V roku 2022 IETF celú normu upratala: význam správ, metódy a kódy, spoločné pre všetky verzie, sú v RFC 9110, cache v RFC 9111 a jednotlivé verzie v samostatných dokumentoch. Ak hľadáte odpoveď na otázku „ako sa má správať 308?“, otvorte RFC 9110 – je napísané zrozumiteľnejšie, než by ste od normy čakali.

Ako si to vyskúšať

Najjednoduchšie je nástroj curl, ktorý je dnes súčasťou Windows aj macOS. Príkaz curl -I https://worldwideweb.sk/ vypíše len stavový kód a hlavičky odpovede. V prehliadači nájdete to isté v nástrojoch pre vývojárov (F12) na záložke Network – po kliknutí na požiadavku uvidíte aj stĺpec s verziou protokolu, kde sa pri veľkých weboch dnes bežne objavuje h3.

Zdroje

About The Author

Related posts

Leave a Reply

Your email address will not be published. Required fields are marked *