Protokol HTTP
Z MiS
				
				
				(Rozdíly mezi verzemi)
				
																
				
				
								
				|  (Doplněn postup komunikace, hlavičky a metody.) | m (Oprava odkazu na #Hlavičky protokolu HTTP.) | ||
| Řádka 62: | Řádka 62: | ||
| * Syntaxe: <code>GET ''složka/soubor'' HTTP/1.1</code> | * Syntaxe: <code>GET ''složka/soubor'' HTTP/1.1</code> | ||
| * Jako druhý parametr se uvádí verze protokolu HTTP. Dnes nejběžněji 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]. | + | * Na dalších řádcích následují [[#Hlavičky protokolu HTTP| hlavičky protokolu HTTP]]. | 
| * Požadavek končí prázdným řádkem. | * Požadavek končí prázdným řádkem. | ||
Aktuální verze z 5. 1. 2021, 20:21
| 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 Hostv 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.
- 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 permanentlya 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).
