Správa webserveru Přednáška 2 Protokol HTTP
Obsah Protokol HTTP –Historie –Verze HTTP zpráva –Požadavek (request) –Response (response) Syntaxe HTTP zprávy –Metody protokolu –Stavové kódy –Hlavičky protokolu HTTP 0.9, 1.0, 1.1, – přehled, význam Formátovací specifikace HTTP MIME Autorizace prostřednictvím HTTP Omezení protokolu HTTP
Co je to protokol Protokol je sada pravidel dodržovaných mezi komunikujícími stranami, tak aby si strany navzájem rozuměly. Definuje typ a množství dat, náležitosti požadavku a odpovědi, …
Verze protokolu HTTP 0.9 –První verze protokolu HTTP z roku –Velice jednoduchý protokol, který nerozlišoval druh zasílaných dat. –Obsahoval pouze jednu metodu – GET HTTP 1.0 –Doplněn o HTTP hlavičky, přidány nové metody a rozšířen o standard MIME (Multipurpose Internet Mail Extension) HTTP 1.1 –Rozšířen o trvalé (persistentní) spojené – dokáže zpracovat více požadavků v rámci jednoho spojení –Podporuje virtuální hostitele s jednou IP-adresou –Využívání Cache
Princip komunikace –Protokol HTTP pracuje na principu „požadavek / odpověď“ –Klient zasílá požadavky webovému serveru, který na ně odpovídá. –Klient nejčastěji komunikuje prostřednictvím webového prohlížeče
HTTP zpráva –HTTP zprávy jsou bloky dat, které si zasílají aplikace komunikující HTTP protokolem –HTTP zpráva je uvozena meta-informacemi, které nám popisují obsah zprávy a další nepovinná data –HTTP zpráva je zasílána mezi klientem, proxy a serverem
HTTP zpráva Start line –požadavek (GET /index.html HTTP/1.1) –odpověď (HTTP/ OK) Headers –hlavičky (Date: Wed, 15 Nov :25:24 GMT) Body –tělo zprávy (category=nature&topic=animals)
Syntaxe HTTP zprávy Požadavek Odpověď GET / fakulty/ui/ HTTP/1.1 Host: Accept:* HTTP/ OK Content-Type: image/gif Content-Lenght: 4352
Metody HTTP Metoda určuje druh služby, kterou klient od serveru požaduje. Metoda se uvádí velkými písmeny. Server nemusí vždy všechny metody podporovat. Při dotazu nepodporovanou metodou pak vrací chybové hlášení. Metody –GET –HEAD –POST –OPTIONS –PUT –DELETE –TRACE
Metoda GET –Nejběžnější metoda –Používá se pro žádost o zaslání určitých dat
Metoda HEAD –Stejná jako metoda GET s rozdílem, že se omezuje pouze na zaslání hlavičky HTTP protokolu –Používá se pro: Zjištění typu požadovaného objektu (bez nutnosti získání dat) Ověření existence požadovaného objektu (viz stavový kód odpovědi) Testování, zdali byl objekt modifikován.
Metoda PUT –Slouží k zaslání a zapsání dat na server. –Data jsou zapsána na požadavkem specifikovanou URL. –Zapsání dat do souboru na server provádí přímo server nikoli externí aplikace
Metoda POST –Slouží k zaslání dat na server spolu s požadavkem. –Zasílaná data nejčastěji slouží jako vstupní data která jsou předána procesu, který je zpracuje.
Metoda TRACE –Slouží k analýze způsobu připojení –Požadavek k serveru může putovat skrz proxy, firewall, gateway a další aplikace - každý z nich má možnost modifikovat HTTP hlavičku –Metoda TRACE umožňuje klientovi vidět jak vypadá HTTP hlavička, když jeho požadavek příjme webový server.
Metoda DELETE –Slouží k požadavku na smazání určitého objektu na serveru, který je specifikován URL adresou.
Metoda OPTIONS –Slouží k dotazu na možnou komunikaci se serverem na konkrétní URL –Umožňuje klientovi určit možnosti a omezení spojené se zdroji a schopností serveru –Pokud dotaz na URL je ve tvaru *, pak se jedná o dotaz na server jako cele
Stavový kód –Stavový kód je číslo, ke kterému přísluší stavové hlášení, které je zasláno klientovi spolu s odpovědí. –Stavový kód vyjadřuje, do jaké míry se podařilo splnit klientův požadavek. Rozsahy stavových kódů: –100 – 199 Informační rozsah –200 – 299 Úspěšný klientský požadavek –300 – 399 Přesměrování –400 – 499 Nekompletní klientský požadavek –500 – 599Chyba serveru
Informační rozsah Stavový kódPopis 100 ContinueKlient může pokračovat v zasílání požadavku. 101 Switching Protocols Server je ochoten změnit aplikační protokol specifikovaný v hlavičce Upgrade request
Úspěšný požadavek Stavový kódPopis 200 OKOperace proběhla bez chyby, požadavek je úspěšně splněn. 201 CreatedVýsledkem požadavku je nově vytvořený objekt. 202 Accepted Byl přijat asynchronní požadavek. Požadavek byl správně akceptován, odpovídající činnost se však ještě zatím nemusela provést. 203 Non-Authoritative InformationMetainformace v hlavičce nepocházejí ze serveru 204 No Content Požadavek byl úspěšný, ale jeho výsledkem nejsou žádná data pro klienta. 205 Reset ContentKlient by měl resetovat momentálně otevřený dokument 206 Partial ContentServer provedl částečný požadavek GET
Přesměrování Stavový kódPopis 300 Multiple choises Požadovaný zdroj se dá získat z několika různých míst. V odpovědi se vrací seznam všech možností. 301 Moved Permanently Požadovaná adresa URL se trvale přesunula na novou adresu URL. Všechny další odkazy musí použít tuto novou URL. 302 Moved Temporarily Požadovaná adresa URL se dočasně přesunula na novou adresu URL. Všechny další odkazy mohou používat dosavadní URL. 303 See Order Požadovaný zdroj je umístěn na jiném místě označeném hlavičkou Location a aby jej klient mohl získat, měl by použít metodu GET 304 Not Modified Podmíněný požadavek byl správně zpracován, dokument však od udané doby nebyl modifikován.
Nekompletní požadavek Stavový kódPopis 400 Bad Request Server nerozumí požadavku, klient jej musí opravit a poslat znovu. 401 Unauthorized Jestliže byl původní požadavek klienta anonymní, musí být nyní autentizován. Pokud už požadavek byl autentizován, pak byl přistup odepřen. 403 ForbiddenServer nemůže požadavku vyhovět, autorizace nebyla úspěšná. 404 Not FoundServer nenašel zadanou adresu URL. 405 Method Not Allowed Použitá metoda není přípustná pro dosažení požadovaného objektu. 406 Not Acceptable Požadovaný objekt není k dispozici ve formátu podporovaném klientem. 408 Request TimeoutKlient nedokončil odesílání požadavku v časovém limitu. 410 GonePožadovaný objekt byl trvale odstraněn.
Chyba serveru Stavový kódPopis 500 Internal Server ErrorNa serveru došlo k neočekávané chybě. 501 Not ImplementedTento požadavek server nepodporuje. 502 Bad Gateway Proxy server nebo brána obdržely od dalšího serveru neplatnou odpověď. 503 Service Unavailable Server dočasně nemůže nebo nechce zpracovat požadavek. Většinou když je přetížený nebo se provádí údržba. 504 Gateway Time-OutBrána nebo proxy vypršely 505 HTTP Version Not SupportedServer nepodporuje verzi HTTP v daném požadavku.
Verze 0.9 MethodGeneralRequestEntityResponse GETNone
Verze 1.0 MethodGeneralRequestEntityResponse GETConnectionAcceptAllowLocation HEADDateAccept-charsetContent-encodingRetry-after POSTMIME-versionAccept-encodingContent-languageServer PUTPragmaAccept-languageContent-length WWW- Authenticate DELETEAuthorizationContent-type LINKFromExpires UNLINKIf-modified-sinceLast-modified RefererLink User-agentTitle URL
Verze 1.1 MethodGeneralRequestEntityResponse OPTIONSCache-controlAcceptAllowAccept-Ranges GETConnectionAccept-charsetContent-encodingAge HEADDateAccept-encodingContent-languageEtag POSTPragmaAccept-languageContent-lengthLocation PUTTrailerAuthorizationContent-locationProxy-authenticate DELETETransfer-encodingExpectContent-md5Retry-after TRACEUpgradeFromContent-rangeServer CONNECTViaHostContent-typeVary WarningIf-modified-sinceExpires WWW- Authenticate If-matchLast-modified If-none-match If-range If-unmodified-since Max-forwards Proxy-authorization Range Referer TE User-agent
General Headers Cache-control – slouží k řízení Cachovacích systémů (proxy, klient,..) no-cache, no-store, max-age=600, public, private, …. Connection – slouží k řízení spojení Connection: Keep-Alive Connection: Close Date – datum vygenerovaný HTTP zprávy Date: Tue, 21 May :34:56 GMT Pragma – základní metoda pro cachovani v HTTP 1.0 Pragma: no-cache Keep-Alive – slouží k nastavení doby trvalého spojení Keep-Alive: 300 Trailer – slouží k umístění časti hlavičky až za tělo zprávy Trailer: Date | … | Date Tue, 21 May :34:56
General Headers Transfer-Encoding – kódování Transfer-Encoding: chunked Upgrade – slouží k změně komunikačního protokolu Upgrade: TLS/1.0 Connection: Upgrade Via – slouží k identifikaci proxy Via: proxy.mojefirma.cz Warning – upozornění klienta na možné problémy s cachováním Warning: 110 proxy.mojefirma.cz "Response is stale"
Entity Headers Allow – slouží u požadavku PUT ke zjištění jakým způsobem bude serveru poskytnut zdroj a u odpovědi při stavovém kódu 405, které metody jsou povoleny Allow: GET, HEAD, POST Content-Encoding – říká, jaké kódování bylo pro obsah použito Accept-encoding: gzip Content-Language –říká, jaký je jazyk použit pro obsah Accept-language: en Content-Length – říká, jak je velký obsah Content-Length: 102 Content-Location – říká, jaký dokument byl použit Content-Location: index.html.cs Content-Range – používá se, pokud server vrací pouze část požadovaných dat Content-Range: /2468
Entity Headers Content-Type –říká, jakého typu je obsah zprávy Content-Type: text/html Expires – používá se k nastavení aktuálnosti obsahu Expires: Tue, 21 May :34:56 GMT Last-Modifies – datup poslední modifikace Last-Modified: Tue, 21 May :34:56 GMT
Formátovací specifikace –Ukončení řádky – CLRF(carriage return plus a line feed) -\r\n –Formátování hlavičky – Header-Name: value –Formát data – Tue, 21 May :34:56 GMT –Kódování URL – viz dále
Verze Space ( )60Less than sign (<) 33Exclamation (!)61Equals sign (=) 34Quotation marks (")62Greater than sign (>) 35Pound sign (#)63Question mark (?) 36Dollar sign ($)64At symbol 37Percent sign (%)91Left bracket ([) 38Ampersand (&)92Backslash (\) 39Apostrophe (')93Right bracket (]) 40Left parenthesis (()94Caret (^) 41Right parenthesis ())96Backtick (`) 43Plus sign (+)123Left brace ({) 44Comma (,)124Pipe (|) 47Slash (/)125Right brace (}) 58Colon (:)126Tilde (~) 59Semicolon (;)
MIME typy Multipurpose Internet Mail Extensions –*/* (povoluji všechny typy) –type /* (všechny subtypy konkrétního typu, např.“, image/* - všechny subtypy typu image) –type /subtype (konkrétní typ a subtyp, např.: image/png)
MIME typy Application binární data, aplikace,...(např.: application/vnd.ms-excel) Audio hlasová či zvuková data (např.: audio/mpeg) Image statický obrázek (např.: image/png) Message Zpráva (např.: message/http) Multipart kombinace více různých částí, ev. i různých typů, do jednoho celku příloh (např.: multipart/form-data) Text text používající různé znakové sady, formátovaný text, text ve formátu HTML apod. (např.: text/html) Video pohyblivé obrázky, videosekvence,... (např.: video/quicktime) Model (např.: model/vrml)
HTTP autorizace
Omezení HTTP Protokol HTTP je bez stavový, tedy protokol nedisponuje nativně prostředkem, který by umožňoval udržet relaci mezi klientem a serverem. Webové aplikace však často vyžadují stavovou informaci - např. nákupní košík Řešení –přenášení údajů v URL a skrytých polí formuláře –Cookies –session proměnné