Protokol HTTP
Z MiS
Obsah |
Protokol HTTP
- Protokol HTTP popisuje postup klienta a serveru při stahování obsahu webových stránek.
- Klientem je v tomto případě internetový prohlížeč uživatele.
- Serverem je serverová aplikace Apache, nginx, IIS či jiná, která naslouchá požadavkům a jako odpověď poskytuje klientům obsah webových stránek.
- Protokol HTTP je bezestavový. Každý požadavek se řeší zcela nezávisle na předchozích požadavcích.
Chování klienta a serveru
Příprava na stažení webové stránky
- Uživatel zadá adresu do adresního řádku prohlížeče.
- Pro navázání spojení se serverem je třeba získat IP adresu serveru.
- Prohlížeč proto osloví DNS server a přeloží doménové jméno na IP adresu (například
www.oauh.cz
→212.111.4.142
).
Tato komunikace ještě přímo nesouvisí s protokolem HTTP, využíváme zde Protokoly aplikační vrstvy.
HTTP: Odeslání příkazu a přijetí odpovědi
- Prohlížeč naváže spojení se serverem pomocí IP adresy (využije služeb protokolu TCP).
- Prohlížeč pošle příkazy, které požaduje provést
- Příklad:
GET nazev_stranky.htm HTTP/1.1
- Příklad:
- K požadavku může připojit ještě další informace: hlavičky protokolu HTTP. Jejich počet je volitelný.
- Některé hlavičky mohou být povinné (například hlavička
Host
v protokolu HTTP 1.1). - Požadavek končí prázdným řádkem.
Zpracování požadavku: dynamické stránky
- Pokud se jedná o statickou webovou stránku, server pouze vyhledá správný soubor a odešle jeho obsah.
- Pokud jsou ale v obsahu stránky použity skriptovací jazyky PHP, ASP.net, Python či další, musí server nejprve zpracovat veškeré příkazy a teprve výsledný kód se odešle jako odpověď.
- Toto se netýká skriptů zpracovávaných na straně klienta (v prohlížeči) — dnes typicky JavaScript. Tyto skripty se odesílají spolu s kódem stránky a jejich zpracování provádí až prohlížeč na počítači klienta.
HTTP: Odpověď serveru
- Jako odpověď server vrátí verzi protokolu, stavový kód a textový popis stavu.
- Příklad:
HTTP/1.1 200 OK
... požadavek skončil bez chyby - Příklad:
HTTP/1.1 404 Page Not Found
... požadovaný soubor na serveru nebyl nalezen.
- Příklad:
- Následují hlavičky odpovědi. (Počet je volitelný.)
- Poté server připojí prázdný řádek a data souboru, který byl požadován.
- Přijetím odpovědi komunikace končí.
- Protože je protokol bezstavový, může server zapomenout veškeré informace. Příští spojení bude zcela nezávislé na tomto.
- Prohlížeč následně zobrazí stránku podle popisu v jazyce HTML
Protokol HTTP verze 1.1 umožňuje po ukončení komunikace (po přijetí odpovědi) ihned poslat další požadavek bez ukončení spojení. Server tedy spojení neuzavírá ihned po odeslání odpovědi, ale až s nějakým zpožděním.
Obrázky a jiné objekty ve stránkách
- Pokud je v popisu stránky obrázek či jiný vložený objekt, prohlížeč naváže nové spojení a vyžádá si stažení souboru s obrázkem (či jiným objektem).
Metody HTTP
- Protokol HTTP používá k popisu požadavků tzv. metody (methods).
- Můžeme si je představit jako textové „příkazy“, které posíláme serveru.
- Je tedy docela snadné si komunikaci prohlédnout a případně hledat chyby.
- Na druhou stranu to ale také nahrává útočníkům, proto dnes mnoho serverů vyžaduje využití SSL pro šifrování komunikace.
- Při použití „https“ se požadavky protokolu HTTP posílají šifrovaným kanálem. Textový zápis metod zůstává stejný, ale celá komunikace je nyní zašifrovaná.
Metoda GET
- Základní požadavek, který slouží ke stažení webové stránky, používá metodu GET.
- Syntaxe:
GET složka/soubor HTTP/1.1
- Jako druhý parametr se uvádí verze protokolu HTTP. Dnes nejběžněji HTTP 1.1.
- Na dalších řádcích následují [#Hlavičky protokolu HTTP| hlavičky protokolu HTTP].
- Požadavek končí prázdným řádkem.
Další metody
- Kromě stahování obsahu webových stránek dnes lze protokol HTTP využít i pro další účely včetně modifikace obsahu webových stránek.
- K těmto účelům slouží další metody:
-
POST
- Požadavek s desláním formulářových dat.
- Neukládá se do historie prohlížeče.
-
PUT
- Nahrání souboru na server.
-
DELETE
- Smazání souborů na serveru.
Hlavičky protokolu HTTP
- Jedná se o doplňující textové informace, které posílají server nebo prohlížeč.
- Jednotlivé hlavičky se oddělují koncem řádku.
- Více o hlavičkách HTTP viz: Wikipedia → List_of_HTTP_header_fields
- Příklady hlaviček prohlížeče
- Tyto hlavičky může posílat prohlížeč k serveru.
-
Host: www.oauh.cz
- Z jaké domény vyžadujeme informace (na dnešním hostingu může běžně na jedné IP adrese běžet více domén).
-
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0
- Označení prohlížeče, který bude stránku zobrazovat.
- Příklady hlaviček serveru
- Doplňující informace pro prohlížeč.
-
Date: Sun, 03 May 2020 14:27:01 GMT
- Datum zpracování požadavku.
-
Server: Apache/2.2.12 (Linux/SUSE)
- Serverová aplikace, která požadavek zpracovala.
-
Content-Type: text/html; charset=iso-8859-1
- Typ obsahu odesílaného souboru.
-
Expires: Thu, 01 Dec 1994 16:00:00 GMT
- Kdy obsah přestává být platný a měl by se stáhnout znovu.
-
Location: /pub/WWW/People.html
- Přesměrování — klient by měl místo této stránky stáhnout stránku z uvedené URL.
Verze protokolu HTTP
- Dnes je nejběžnější použití HTTP/1.1 (publikováno 1997, aktualizováno 2014) nebo HTTP/2 (publikováno 2015).
- Starší verze 0.9 a 1.0 už se dnes běžně nepoužívají.
- Postupně se pracuje na specifikaci HTTP/3.
Úkol: Prohlédněte si komunikaci
- Úkol
- Prohlédněte si komunikaci mezi klientem a serverem
- Najděte stránku WebSniffer.cc.
- Zadejte nějakou URL adresu do okénka.
- Web sniffer vám vypíše kompletní komunikaci mezi vaším prohlížečem a serverem.
- Zobrazen máte požadavek s odeslanými hlavičkami i přijatou odpověď včetně hlaviček, které poskytuje server.
Úkol: Odeslání požadavku ručně
Úkol: Vyzkoušejte si ručně, co musí udělat prohlížeč!
- Vyberte si web, ke kterému se zkusíte připojit. (V našem příkladu píšeme
www.oauh.cz
. Vy napište skutečnou URL adresu bez HTTP. - Do poznámkového bloku (či jiného čistě textového editoru) si připravte požadavek:
GET / HTTP 1.1 Host: www.oauh.cz <prázdný řádek>
- Připravený požadavek (včetně prázdného řádku na konci) zkopírujte do schránky.
- Spusťte program PuTTY a vyplňte údaje pro připojení k serveru.
Server: | www.oauh.cz
|
Port: | 80
|
Connection-type: | raw
|
- Aby se po ukončení spojení okno neuzavřelo, zatrhněte navíc:
Close window on exit: | Never
|
- Ihned po navázání spojení klikněte do okénka PuTTY pravým tlačítkem.
- Tím provedete operaci „paste“: odešlete otevřeným spojením celý obsah schránky Windows (ve schránce máte připravený požadavek HTTP GET).
- Zkontrolujte odpověď.
- Odpověď serveru by měla začínat:
HTTP/1.1 200 OK
- Pokud je odpověď jiná, najděte chybový kód a upravte postup.
- Dnes servery často vyžadují šifrované spojení přes HTTPS. V tom případě bude nejspíš odpověď serveru začínat:
HTTP/1.1 301 Moved permanently
a bude následovat hlavičkaLocation:
, která udává, na jaké adrese najdete stránku nyní (https://...).
- Odpověď serveru by měla začínat:
- Obvyklé chyby
- Chybějící hlavička
Host:
- Špatná velikost písmen (dodržte malá a velká písmena podle vzoru).
- Chybějící prázdný řádek na konci (požadavek končí prázdným řádkem — dvěma dvojicemi CR+LF).