http | |
---|---|
název | Hypertext Transfer Protocol |
Úroveň (podle modelu OSI ) | Aplikovaný |
Rodina | TCP/IP |
Vytvořeno v | 1992 |
Port/ID | 80/ TCP |
Specifikace | RFC 124 , RFC 1945 , RFC 2616 , RFC 2617 , RFC 6266 , RFC 7230 , RFC 7240 , RFC 8446 . |
Hlavní implementace (klienti) | Webové prohlížeče , například Internet Explorer , Mozilla Firefox , Opera , Google Chrome , Yandex Browser , Microsoft Edge atd. |
Implementace jádra ( servery ) | Apache , IIS , nginx , Google Web Server atd. |
Mediální soubory na Wikimedia Commons |
HTTP ( HyperText Transfer Protocol - „ hypertext transfer protocol “) je protokol pro přenos dat aplikační vrstvy , původně ve formě hypertextových dokumentů ve formátu HTML , který se v současnosti používá k přenosu libovolných dat.
Základem HTTP je technologie „klient-server“ , tedy existence:
HTTP je nyní všudypřítomný na World Wide Web pro získávání informací z webových stránek . V roce 2006 překonal HTTP provoz v Severní Americe provoz P2P sítí o 46 %, z čehož téměř polovinu tvořilo streamování videa a zvuku [1] .
HTTP se také používá jako „přenos“ pro další protokoly aplikační vrstvy, jako je SOAP , XML-RPC , WebDAV .
Hlavním předmětem manipulace v HTTP je zdroj, na který ukazuje URI (Uniform Resource Identifier) v požadavku klienta. Tyto prostředky jsou obvykle soubory uložené na serveru , ale mohou to být logické objekty nebo něco abstraktního. Charakteristickým rysem protokolu HTTP je možnost specifikovat v požadavku a odpovědi , jak je stejný zdroj reprezentován různými parametry: formát , kódování , jazyk atd. (k tomu se používá zejména HTTP hlavička ). Díky možnosti určit, jak je zpráva zakódována, si klient a server mohou vyměňovat binární data , i když je tento protokol textový.
HTTP je protokol aplikační vrstvy ; jeho protějšky jsou FTP a SMTP . Zprávy se vyměňují podle obvyklého schématu „žádost-odpověď“. HTTP používá k identifikaci zdrojů globální identifikátory URI . Na rozdíl od mnoha jiných protokolů je HTTP bezstavový. To znamená, že mezi páry požadavek-odpověď není uložen žádný mezistav. Komponenty používající HTTP mohou nezávisle ukládat informace o stavu související s nedávnými požadavky a odpověďmi (např. " cookies " na straně klienta, "relace" na straně serveru). Prohlížeč, který odesílá požadavky, může sledovat zpoždění odpovědí. Server může ukládat IP adresy a hlavičky požadavků posledních klientů. Samotný protokol však nezná předchozí požadavky a odpovědi, neposkytuje vnitřní státní podporu, takové požadavky nemá.
Většina protokolů zajišťuje vytvoření relace TCP, během níž dojde k autorizaci jednou, a další akce se provádějí v kontextu této autorizace. HTTP vytvoří samostatnou TCP relaci pro každý požadavek; novější verze HTTP umožňovaly provádět více požadavků v jedné TCP relaci, ale prohlížeče si obvykle vyžádají pouze stránku a objekty v ní obsažené (obrázky, kaskádové styly atd.) a poté TCP relaci okamžitě ukončí. HTTP používá cookies k podpoře autorizovaného (neanonymního) přístupu ; Tato metoda autorizace navíc umožňuje uložit relaci i po restartování klienta a serveru.
Při přístupu k datům přes FTP nebo souborové protokoly je typ souboru (přesněji typ dat v něm obsažených) určen příponou názvu souboru, což není vždy vhodné. HTTP před samotným přenosem dat přenese hlavičku Content-Type: typ / podtyp, která klientovi umožňuje jednoznačně určit, jak má odesílaná data zpracovat. To je důležité zejména při práci se skripty CGI , kdy přípona názvu souboru neoznačuje typ dat odesílaných klientovi, ale nutnost spustit tento soubor na serveru a odeslat klientovi výsledky programu zapsaného v tomto souboru. (v tomto případě stejný soubor v závislosti na argumentech požadavku a vlastních úvahách může generovat odpovědi různých typů - v nejjednodušším případě obrázky v různých formátech).
HTTP navíc umožňuje klientovi odesílat parametry na server, které budou předány spuštěnému CGI skriptu. Za tímto účelem byly formuláře zavedeny do HTML .
Tyto vlastnosti HTTP umožnily vytvářet vyhledávače (prvním z nich byl AltaVista , vytvořený DEC ), fóra a internetové obchody. Tím se internet komercializoval, objevily se firmy, jejichž hlavním oborem činnosti bylo poskytování přístupu k internetu (poskytovatelé) a tvorba webových stránek.
Veškerý software pro práci s protokolem HTTP je rozdělen do tří širokých kategorií:
Pro rozlišení koncových serverů od proxy používá oficiální dokumentace termín původní server . Jeden a tentýž softwarový produkt může současně vykonávat funkce klienta, serveru nebo zprostředkovatele v závislosti na úkolech. Specifikace protokolu HTTP podrobně popisuje chování každé z těchto rolí.
Protokol HTTP byl původně navržen pro přístup k hypertextovým dokumentům na World Wide Web. Proto jsou hlavní klientské implementace prohlížeče (user agenti). Pro prohlížení uloženého obsahu stránek na počítači bez připojení k internetu byly vynalezeny offline prohlížeče . Pokud je připojení nestabilní, ke stažení velkých souborů se používají manažeři stahování ; umožňují vám stáhnout zadané soubory kdykoli po ztrátě připojení k webovému serveru. Některé virtuální atlasy (například Google Earth a NASA World Wind ) také používají HTTP.
Protokol HTTP je často používán programy ke stahování aktualizací.
V internetových vyhledávačích se používá celá řada robotických programů . Mezi nimi jsou webové pavouky ( crawlery ), které procházejí hypertextovými odkazy, sestavují databázi serverových zdrojů a ukládají jejich obsah pro další analýzu.
Hlavní implementace: Apache , Internet Information Services (IIS), nginx , LiteSpeed Web Server (LSWS), Google Web Server , lighttpd .
Hlavní implementace: Squid , UserGate , Multiproxy , Naviscope , nginx .
Každá zpráva HTTP se skládá ze tří částí, které se odesílají v uvedeném pořadí:
Tělo zprávy může být vynecháno, ale počáteční řádek a záhlaví jsou povinné prvky. Výjimkou je verze 0.9 protokolu, kde zpráva požadavku obsahuje pouze počáteční řádek a zpráva odpovědi obsahuje pouze tělo zprávy.
U protokolu verze 1.1 musí zpráva požadavku obsahovat hlavičku hostitele .
Počáteční řetězce se liší pro požadavek a odpověď. Řetězec dotazu vypadá takto:
GET URI — pro verzi protokolu 0.9; Метод URI HTTP/Версия - pro ostatní verze.Tady:
Chcete-li požádat o stránku pro tento článek, musí klient předat řetězec (uvedeno pouze jedno záhlaví):
ZÍSKEJTE /wiki/HTTP HTTP/1.0 Hostitel: en.wikipedia.orgPočáteční řádek odpovědi serveru má následující formát: HTTP/Версия КодСостояния Пояснение, kde:
Počáteční řádek odpovědi serveru na předchozí požadavek může například vypadat takto:
HTTP/1.0 200 OKMetoda HTTP ( anglicky HTTP Method ) - sekvence libovolných znaků, kromě ovládacích prvků a oddělovačů, označující hlavní operaci na zdroji. Obvykle je metodou krátké anglické slovo napsané velkými písmeny. Všimněte si, že název metody rozlišuje malá a velká písmena.
Server může používat libovolné metody, pro server nebo klienta neexistují žádné povinné metody. Pokud server nerozpozná metodu zadanou klientem, měl by vrátit stav 501(Neimplementováno). Pokud je metoda známa serveru, ale není použitelná pro konkrétní zdroj, 405vrátí se zpráva s kódem (Metoda není povolena). V obou případech BY MĚL server Allowve zprávě s odpovědí obsahovat hlavičku se seznamem podporovaných metod.
Kromě metod GETa HEADse často používá metoda POST.
MOŽNOSTIPoužívá se k určení možností webového serveru nebo možností připojení pro konkrétní zdroj. Jako odpověď BY MĚL server obsahovat hlavičku Allowse seznamem podporovaných metod. Záhlaví odpovědi může také obsahovat informace o podporovaných rozšířeních.
Předpokládá se, že požadavek klienta může obsahovat tělo zprávy označující informace, které ho zajímají. Formát těla a pořadí práce s ním není v současné době definováno; server by to měl prozatím ignorovat. Situace je podobná s tělem v odpovědi serveru.
Aby bylo možné zjistit schopnosti celého serveru, musí klient zadat hvězdičku - " *" - v URI. Požadavky " OPTIONS * HTTP/1.1" lze také použít ke kontrole stavu serveru (podobně jako " ping ") a k otestování, zda server podporuje protokol HTTP verze 1.1.
Výsledek provedení této metody se neukládá do mezipaměti .
GETPoužívá se k dotazování na obsah zadaného zdroje. GETProces můžete také spustit pomocí metody . V tomto případě by měla být informace o průběhu procesu zahrnuta do těla zprávy s odpovědí.
Klient může předat parametry provádění požadavku v URI cílového zdroje za ?znakem „ “:
GET /path/resource?param1=value1¶m2=value2 HTTP/1.1
Podle standardu HTTP GETjsou požadavky typu považovány za idempotentní [2]
Kromě obvyklé metody GETexistují také
Pořadí provádění takových požadavků je standardy definováno samostatně.
HEADPodobné jako metoda GET, s tím rozdílem, že v odpovědi serveru není žádné tělo. Dotaz HEADse obvykle používá k načtení metadat , kontrole existence zdroje ( ověření adresy URL ) a zjištění, zda se od posledního přístupu změnil.
Záhlaví odpovědí lze uložit do mezipaměti. Pokud metadata zdroje neodpovídají odpovídajícím informacím v mezipaměti, je kopie zdroje označena jako zastaralá.
POSTNapříklad v blozích mohou návštěvníci obvykle zadat své komentáře k příspěvkům do HTML formuláře, poté jsou odeslány na server metodou POST a ten je vloží na stránku. V tomto případě jsou přenášená data (v příkladu blogu text komentáře) zahrnuta do těla požadavku.POST
Na rozdíl od metody GETnení metoda POSTpovažována za idempotentní [2] , to znamená, že opakované opakování stejných dotazů POSTmůže vracet různé výsledky (například po každém odeslání komentáře se objeví další kopie tohoto komentáře).
Pokud je výsledek provedení 200(OK), tělo odpovědi by mělo obsahovat zprávu o výsledku požadavku. Pokud byl zdroj vytvořen, server BY MĚL vrátit odpověď 201(Vytvořeno) s URI nového zdroje v souboru Location.
Zpráva o odpovědi serveru pro provedení metody POSTnení uložena v mezipaměti.
PUTSSlouží ke stažení obsahu požadavku na URI specifikovaný v požadavku. Pokud zdroj pro daný URI neexistuje, server jej vytvoří a vrátí stav 201(Vytvořeno). Pokud byl zdroj změněn, server vrátí 200(OK) nebo 204(žádný obsah). Server NESMÍ ignorovat neplatné hlavičky Content-*zaslané klientem spolu se zprávou. Pokud některá z těchto hlaviček nelze rozpoznat nebo je za aktuálních podmínek neplatná, 501musí být vrácen chybový kód (Neimplementováno).
Základní rozdíl mezi metodami POSTspočívá PUTv pochopení záměru URI zdrojů. Metoda POSTpředpokládá, že obsah přenášený klientem bude zpracován na zadaném URI. Při použití PUT, klient předpokládá, že načítaný obsah odpovídá prostředku na daném URI.
Zprávy odpovědí serveru na metodu PUTse neukládají do mezipaměti.
PATCHPodobné jako PUT, ale vztahuje se pouze na fragment zdroje.
VYMAZATOdstraní zadaný prostředek.
TRACEVrátí přijatý požadavek, takže klient může vidět, jaké informace zprostředkující servery přidávají nebo upravují v požadavku.
PŘIPOJITPřevádí připojení požadavku na transparentní tunel TCP/IP , obvykle k usnadnění navázání zabezpečeného připojení SSL prostřednictvím nešifrovaného proxy serveru .
První číslice označuje třídu stavu. Po kódu odpovědi obvykle následuje mezerou oddělená vysvětlující fráze v angličtině, která dané osobě vysvětluje důvod takové odpovědi. Příklady:
201 Webová stránka vytvořena 403 Přístup povolen pouze registrovaným uživatelům 507 Nedostatek úložištěKlient se z kódu odpovědi dozví o výsledcích svého požadavku a určí, jaké kroky podnikne dále. Sada stavových kódů je standardem a je popsána v příslušných dokumentech RFC . Klient nemusí znát všechny stavové kódy, ale musí reagovat podle třídy kódu.
В настоящее время выделено пять классов кодов состояния
Kód | Třída | Účel |
---|---|---|
1xx | Informační
(angl. informační ) |
Информирование о процессе передачи.
В HTTP/1.0 — сообщения с такими кодами должны игнорироваться. V HTTP/1.1 musí být klient připraven přijmout tuto třídu zpráv jako normální odpověď, ale na server není třeba nic odesílat. Samotné zprávy ze serveru obsahují pouze počáteční řádek odpovědi a v případě potřeby několik polí záhlaví specifických pro odpověď. Proxy servery by takové zprávy měly odesílat dále ze serveru klientovi. |
2xx | Úspěch
(Anglický úspěch ) |
V závislosti na stavu může server stále odesílat záhlaví a tělo zprávy. |
3xx | přesměrovat
(angl. Redirection ) |
To umožňuje použití fragmentů v cílovém URI. 301302303305307Location |
4xx | Chyba klienta
( Chyba klienta v angličtině ) |
Indikace chyb ze strany klienta.HEAD |
5xx | Chyba serveru
( Chyba serveru v angličtině ) |
Informování o případech neúspěšné operace z důvodu poruchy serveru. Ve všech situacích musí server kromě použití metody HEADobsahovat vysvětlení, že klient zobrazí uživatele v těle zprávy. |
HTTP hlavičky ( anglicky http hlavičky ) jsou řádky ve zprávě HTTP obsahující parametr s významem parametru. Formát nadpisů odpovídá obecnému formátu nadpisů textových síťových zpráv ARPA (viz RFC 822 ). Záhlaví musí být odděleno od těla zprávy alespoň jedním prázdným řádkem.
Příklady záhlaví:
Server: Apache/2.2.11 (Win32) PHP/5.3.0 Naposledy změněno: so, 16. ledna 2010 21:16:42 GMT Content-Type: text/plain; charset=windows-1251 Jazyk obsahu: enVe výše uvedeném příkladu představuje každý řádek jedno záhlaví. V tomto případě se to, co je před dvojtečkou, nazývá název ( anglický název ), a to, co je za ním, se nazývá hodnota ( anglicky value ).
Všechny nadpisy jsou rozděleny do čtyř hlavních skupin:
Toto je pořadí, ve kterém se doporučuje odesílat hlavičky příjemci.
Všechny hlavičky potřebné pro fungování HTTP jsou popsány v základních RFC . Pokud není dostatek stávajících, můžete zadat vlastní. Tradičně se názvy těchto dodatečných nadpisů přidávají k předponě „ X-“, aby se předešlo konfliktu názvů s možnými existujícími. Například jako v záhlaví X-Powered-Bynebo X-Cache. Někteří vývojáři používají své vlastní předpony. Příklady takových hlaviček jsou Ms-Echo-Requesttaké Ms-Echo-Replypředstaveny společností Microsoft Corporation pro rozšíření WebDav .
Tělo zprávy HTTP ( message-body), pokud je přítomno, se používá k přenosu těla objektu spojeného s požadavkem nebo odpovědí. Tělo zprávy se liší od těla objektu ( entity-body) pouze tehdy, když je použito kódování přenosu, jak ukazuje pole záhlaví Transfer-Encoding.
message-body = entita-body | <entita-tělo zakódováno podle přenosové kódování>Pole Transfer-Encodingse používá k označení jakéhokoli kódování přenosu použitého aplikací, aby se zajistilo, že zpráva je přenášena bezpečně a správně. Pole Transfer-Encoding je vlastností zprávy, nikoli objektu, a proto může být přidáno nebo odebráno jakoukoli aplikací v řetězci žádost/odpověď.
Pravidla upravující platnost těla zprávy ve zprávě se liší pro požadavky a odpovědi.
Přítomnost zprávy zprávy v požadavku je označena přidáním hlavičky Content-Lengthnebo Transfer-Encoding. Tělo zprávy lze přidat do požadavku pouze v případě, že metoda požadavku umožňuje tělo objektu.
Tělo zprávy je zapnuto nebo není zapnuto – záleží jak na metodě požadavku, tak na kódu stavu odpovědi. Všechny odpovědi na požadavek s metodou HEADby neměly obsahovat tělo zprávy, i když existují pole záhlaví objektu ( entity-header), nutící věřit v přítomnost objektu. Žádné odpovědi se stavovými kódy 1xx(informacemi) 204(bez obsahu, bez obsahu) a 304(nezměněno, nezměněno) by měly obsahovat těla zprávy. Všechny ostatní odpovědi obsahují tělo zprávy, i když má nulovou délku.
Požadavek zákazníka:
ZÍSKEJTE stránku /wiki/ HTTP/1.1 Hostitel: en.wikipedia.org User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Přijmout: text/html Připojení: zavřít (prázdný řádek)Odpověď serveru:
HTTP/1.1 200 OK Datum: středa, 11. února 2009 11:20:59 GMT Server: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 Poslední změna: středa, 11. února 2009 11:20:59 GMT Jazyk obsahu: en Content-Typ: text/html; charset=utf-8 Délka obsahu: 1234 Připojení: zavřít (prázdný řetězec) (požadovaná stránka v HTML )Odpověď vypadá stejně 203. Co jsou výrazně přímo požadovaná data, jsou oddělena od HTTP hlav pomocí CR , LF , CR, LF.
PřesměrováníPředpokládejme, že fiktivní společnost "Example Corp." existuje hlavní stránka „http://example.com“ a doména alias „example.org“ . Klient odešle požadavek na stránku „O společnosti“ do sekundární domény (část nadpisů je snížena):
ZÍSKEJTE /about.html HTTP/1.1 Hostitel: example.org User Agent: MyLonelyBrowser/5.0Vzhledem k tomu, že doména Example.org není hlavní a společnost ji v budoucnu nebude používat pro jiné účely, jejich server bude vracet kód pro neustálé přesměrování, přičemž v záhlaví Locationcílové adresy URL uvede:
HTTP/1.x 301 trvale přesunuto Umístění: http://example.com/about.html#contacts Datum: Čt, 19. února 2009 11:08:01 GMT Server: Apache/2.2.4 Content-Typ: text/html; charset=windows-1251 Délka obsahu: 110 (prázdný řádek) <html><body><a href="http://example.com/about.html#contacts">Klikněte sem</a></body></html>V nadpisu Locationmůžete určit fragmenty jako v tomto příkladu. Prohlížeč v požadavku neuvedl fragment, protože ho zajímá celý dokument. Jakmile však stránku načte, automaticky posouvá stránku na fragment „Kontakty“. Do těla odpovědi byl také umístěn krátký HTML dokument s odkazem, kterým by se návštěvník dostal na cílovou stránku, pokud se na ni prohlížeč automaticky nepřepne. Název Content-Typeobsahuje charakteristiky tohoto konkrétního vyslovovaného HTML, a nikoli dokumentu, který se nachází na cílovém URI.
Řekněme, že stejná společnost "Example Corp." má několik regionálních poboček po celém světě. A pro každou agenturu mají webové stránky s odpovídající ccTLD . Požadavek na domovskou stránku pro hlavní web „example.com“ může vypadat takto:
GET /HTTP/1.1 hostitel: example.com User Agent: MyLonelyBrowser/5.0 Přijmout: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Přijímací jazyk: ru,en-us;q=0,7,en;q=0,3 Accept-Charset: windows-1251,utf-8;q=0,7,*;q=0,7Server vzal v úvahu titulek Accept-Languagea vytvořil odpověď s dočasným přesměrováním na ruský server "Example.ru" s uvedením jeho adresy v záhlaví Location:
HTTP/1.x Nalezeno 302 Umístění: http://example.ru/ Cache-Control: soukromé Datum: Čt, 19. února 2009 11:08:01 GMT Server: Apache/2.2.6 Content-Typ: text/html; charset=windows-1251 Délka obsahu: 82 (prázdný řádek) <html><body><a href="http://example.ru">Example Corp.</a></body></html>Věnujte pozornost hlavičce Cache-Control: hodnota "private" říká zbytku serverů (především proxy), že odpověď může být uložena do mezipaměti pouze na straně klienta. Jinak je možné, že následující návštěvníci z jiných zemí pojedou vždy do jiného zastoupení.
Pro přesměrování se také používají kódy odezvy 303(Viz Ostatní) a 307(Dočasné přesměrování) .
Stažení životopisu a fragmentuPředpokládejme, že fiktivní organizace nabízí stažení videa z poslední konference z webové stránky na adrese: „http://example.org/conf-2009.avi“ – asi 160 MB . Zvažte, jak je soubor znovu zobrazitelný v případě selhání a jak by správce čerpání zorganizoval víceproudové zatížení několika fragmentů.
V obou případech klient zadá svůj první požadavek takto:
GET /conf-2009.avi HTTP/1.0 Hostitel: example.org Akceptovat: */* User Agent: Mozilla/4.0 (kompatibilní; MSIE 5.0; Windows 98) Referent: http://example.org/Název Refereroznačuje, že soubor byl vyžádán z hlavní stránky webu. Správci stahování jej obvykle také specifikují, aby napodobili přechod ze stránky webu. Bez něj může server odpovědět 403(přístup zakázán), pokud nejsou povoleny požadavky z jiných stránek. V našem případě server vrátil úspěšnou odpověď:
HTTP/1.1 200 OK Datum: Čt, 19. února 2009 12:27:04 GMT Server: Apache/2.2.3 Poslední úprava: středa, 18. června 2003 16:05:58 GMT Etag: "56d-9989200-1132c580" Content-Type: video/x-msvideo Obsah-délka: 160993792 Accept-Ranges: bytes Připojení: zavřít (prázdný řetězec) (binární obsah celého souboru)Hlavička Accept-Rangesinformuje klienta, že si může vyžádat fragmenty ze serveru, zadáním jejich offsetů od začátku souboru v bajtech. Pokud tato hlavička chybí, pak MŮŽE klient varovat uživatele, že se soubor s největší pravděpodobností nepodaří stáhnout.
Na základě hodnoty záhlaví Content-Lengthrozdělí správce stahování celý svazek na stejné části a vyžádá si je samostatně, přičemž uspořádá několik streamů. Pokud server nespecifikuje velikost, pak klient nebude moci implementovat paralelní stahování, ale bude stále moci stahovat soubor, dokud server neodpoví 416(Požadovaný rozsah není splněn).
Допустим, на 84-м мегабайте соединение с Интернетом прервалось и процест закигрус Когда соединение с Интернетом было восстановлено, менеджер закачек автоматически послал новый запрос на сервер, но с указанием выдать содержимое с 84-го мегабайта:
GET /conf-2009.avi HTTP/1.0 Hostitel: example.org Akceptovat: */* User Agent: Mozilla/4.0 (kompatibilní; MSIE 5.0; Windows 98) Rozsah: bajtů=88080384- Referent: http://example.org/V tomto ohledu server vrátí odpověď: RefererRange
HTTP/1.1 206 Částečný obsah Datum: Čt, 19. února 2009 12:27:08 GMT Server: Apache/2.2.3 Poslední úprava: středa, 18. června 2003 16:05:58 GMT Etag: "56d-9989200-1132c580" Accept-Ranges: bytes Rozsah obsahu: bajty 88080384-160993791/160993792 Obsah-délka: 72913408 Připojení: zavřít Content-Type: video/x-msvideo (prázdný řetězec) (binární obsah od 84. MB)Accept-RangesSkutečnost, že je přenášen fragment, je klientovi známa podle kódu 206(částečný obsah). Content-RangeVěnujte pozornost hlavičce Content-Length - udává velikost těla zprávy, tedy přenášeného fragmentu. Pokud server vrátí několik fragmentů, Content-Lengthbude obsahovat jejich celkový objem.
Nyní zpět ke správci stahování.
Počáteční správce se načte hned při prvním požadavku a přeruší připojení, jakmile dosáhne začátku druhého požadavku. Zbytek bude požadován samostatně. Například 4. oddíl bude požadován s následujícími záhlavími (některá záhlaví vynechána – viz úplný příklad výše):
GET /conf-2009.avi HTTP/1.0 Rozsah: bytes=64397516-80496894Odpověď serveru v tomto případě bude následující (část hlaviček je vynechána – viz úplný příklad výše):
HTTP/1.1 206 Částečný obsah Accept-Ranges: bytes Rozsah obsahu: bajty 64397516-80496894/160993792 Délka obsahu: 16099379 (prázdný řetězec) (4. část binárního obsahu)Pokud je takový požadavek odeslán na server, který nepodporuje fragmenty, vrátí standardní odpověď 200(OK), jak je uvedeno na samém začátku, ale bez hlavičky Accept-Ranges.
Viz také částečný GET , rozsahy bajtů , odpověď 206 , odpověď 416 .HTTP umožňuje požadovat ne celý obsah zdroje najednou, ale pouze zadaný fragment. Takové žádosti se nazývají částečné GET; schopnost je spouštět je pro servery volitelná (ale žádoucí). Částečné části se GETpoužívají hlavně pro obnovení souborů a rychlé paralelní stahování ve více vláknech. Některé programy stáhnou hlavičku archivu, zobrazí uživateli vnitřní strukturu a poté si vyžádají fragmenty se zadanými prvky archivu.
Aby klient přijal fragment, odešle požadavek na server s hlavičkou Rangespecifikující požadované rozsahy bajtů v něm . Pokud server nerozumí dílčím požadavkům (ignoruje hlavičku Range), vrátí veškerý obsah se statusem 200, stejně jako u normálního GET. V případě úspěšného dokončení vrátí server místo kódu 200odpověď se stavem 206(Partial Content) včetně hlavičky v odpovědi Content-Range. Samotné fragmenty lze předat dvěma způsoby:
Metoda GETse změní na "podmíněnou GET", pokud zpráva požadavku obsahuje pole záhlaví If-Modified-Since. V reakci na "podmíněné GET" je tělo požadovaného zdroje odesláno pouze v případě, že se změnilo od data uvedeného v záhlaví If-Modified-Since. Algoritmus pro určení tohoto zahrnuje následující případy:
Použití metody "podmíněného GET" je zaměřeno na uvolnění sítě, protože umožňuje nepřenášet nadbytečné informace po síti.
Vyjednávání obsahu je mechanismus pro automatické určení požadovaného zdroje v přítomnosti několika různých verzí dokumentu. Předměty vyjednávání mohou být nejen prostředky serveru, ale také vrácené stránky s chybovými hláškami ( 403 , 404 atd.).
Existují dva hlavní typy dohod:
Oba typy lze používat současně nebo každý z nich samostatně.
Hlavní specifikace protokolu ( RFC 2616 ) také zdůrazňuje tzv. transparentní vyjednávání jako preferovanou kombinaci obou typů . Tento druhý mechanismus by neměl být zaměňován s nezávislou technologií Transparent Content Negotiation (TCN) , která není součástí protokolu HTTP, ale lze s ním použít. Oba mají podstatný rozdíl v principu fungování a samotném významu slova „transparent“ (průhledný). Ve specifikaci HTTP transparentnost znamená, že proces je pro klienta a server neviditelný, a v technologii TCN transparentnost znamená dostupnost úplného seznamu možností zdrojů pro všechny účastníky procesu doručování dat.
Spravováno serveremPokud existuje více verzí prostředku, server může analyzovat hlavičky požadavků klienta a vrátit to, co považuje za nejlepší. Nadpisy Accept, Accept-Charset, Accept-Encodinga Accept-Languagesjsou převážně analyzovány User-Agent. Je žádoucí, aby server zahrnul do odpovědi hlavičku Varyudávající parametry, kterými se obsah odlišuje požadovaným URI.
Geografické umístění klienta lze určit ze vzdálené IP adresy . To je možné díky skutečnosti, že IP adresy, stejně jako názvy domén , jsou registrovány na konkrétní osobu nebo organizaci. Při registraci určíte region, ve kterém se bude požadovaný adresní prostor používat. Tato data jsou veřejně dostupná a na internetu lze nalézt odpovídající volně distribuované databáze a hotové softwarové moduly pro práci s nimi (měli byste se zaměřit na klíčová slova „Geo IP“).
Je třeba si uvědomit, že tato metoda je schopna určit polohu s maximální přesností města (zde se určuje země). V tomto případě jsou informace relevantní pouze v době registrace adresního prostoru. Pokud si například moskevský poskytovatel zaregistruje rozsah adres označujících Moskvu a začne poskytovat přístup zákazníkům z nejbližších předměstí, mohou jeho předplatitelé na některých stránkách pozorovat, že jsou z Moskvy, a nikoli z Krasnogorsku nebo Dzeržinského .
Serverem řízené vyjednávání má několik nevýhod:
V tomto případě je typ obsahu určen pouze na straně klienta. Za tímto účelem server vrátí v odpovědi stavový kód 300(Multiple Choices) nebo 406(Not Acceptable) seznam možností, z nichž uživatel vybere tu správnou. Klientem řízené vyjednávání funguje dobře, když se obsah liší nejběžnějšími způsoby (jako je jazyk a kódování) a je použita veřejná mezipaměť.
Hlavní nevýhodou je režie, protože k získání požadovaného obsahu musíte zadat další požadavek.
Transparentní vyjednáváníToto vyjednávání je pro klienta i server zcela transparentní. V tomto případě se používá sdílená mezipaměť, která obsahuje seznam možností jako u klientem řízeného vyjednávání. Pokud mezipaměť rozumí všem těmto možnostem, pak se rozhodne sama, jako při vyjednávání řízeném serverem. To snižuje zatížení původního serveru a eliminuje další požadavky od klienta.
Specifikace jádra HTTP podrobně nepopisuje mechanismus transparentního vyjednávání.
Protokol HTTP podporuje přenos více entit v rámci jedné zprávy. Entity lze navíc přenášet nejen jako jednoúrovňovou sekvenci, ale také jako hierarchii s prvky vnořenými do sebe. Typy médií se používají k označení více obsahu multipart/*. Práce s takovými typy se provádí podle obecných pravidel popsaných v RFC 2046 (pokud není u konkrétního typu média definováno jinak). Pokud přijímač neumí s typem pracovat, pak se k němu chová stejně jako multipart/mixed.
Parametr hranice znamená oddělovač mezi různými typy odesílaných zpráv. Například parametr DestAddress předaný z formuláře předá hodnotu e-mailové adresy a prvek AttachedFile1 následující za ním odešle binární obsah obrázku .jpg
Na straně serveru mohou být zprávy s více obsahem odeslány jako odpověď na částečnéGET zprávy , když je požadováno více fragmentů zdrojů. V tomto případě je použit typ média multipart/byteranges.
Na straně klienta se při odesílání formuláře HTMLPOST zobrazí soubor . Typickým příkladem jsou stránky pro odesílání e-mailů s přílohami souborů. Při odeslání takového dopisu prohlížeč vygeneruje zprávu typu multipart/form-data, integruje do ní jako samostatné části zadané uživatelem, předmět dopisu, adresu příjemce, samotný text a přiložené soubory:
POST /send-message.html HTTP/1.1 Hostitel: mail.example.com Referer: http://mail.example.com/send-message.html User-Agent: BrowserForDummies/4.67b boundary="Asrf456BGe4h" Content-Length: (celková délka včetně podřízených záhlaví) Spojení: keep-alive Keep Alive: 300 (prázdný řetězec) (chybějící preambule) --Asrf456BGe4h name="DestAddress" (prázdný řádek) [email protected] --Asrf456BGe4h name="MessageTitle" (prázdný řádek) mrzí mě to --Asrf456BGe4h name="Text zprávy" (prázdný řádek) Tvůj mazlíček lev, kterého jsi tu nechal minulý týden jsem roztrhal celou pohovku. Prosím, vyzvedněte si to brzy! V příloze jsou dva obrázky následků. --Asrf456BGe4h Obsah-Dispozice: formulář-data; name="AttachedFile1"; filename="horor-photo-1.jpg" Typ obsahu: obrázek/jpeg (prázdný řetězec) (binární obsah první fotografie) --Asrf456BGe4h Obsah-Dispozice: formulář-data; name="AttachedFile2"; filename="horor-photo-2.jpg" Typ obsahu: obrázek/jpeg (prázdný řetězec) (binární obsah druhé fotografie) --Asrf456BGe4h-- (chybí epilog)V příkladu v záhlaví se Content-Dispositionparametr nameshoduje s atributem nameve značkách HTML <INPUT>a <TEXTAREA>. Parametr filenamese rovná původnímu názvu souboru v počítači uživatele. Další informace o generování formulářů HTML a přikládání souborů naleznete v RFC 1867 .
URI | Schémata|
---|---|
Oficiální | |
neoficiální |
protokoly TCP /IP podle vrstev modelu OSI | Základní|
---|---|
Fyzický | |
odvedeny | |
síť | |
Doprava | |
zasedání | |
Zastoupení | |
Aplikovaný | |
Uplatněno jiné | |
Seznam portů TCP a UDP |
Web a webové stránky | |
---|---|
globálně | |
Lokálně | |
Typy stránek a služeb |
|
Tvorba a údržba | |
Typy rozložení, stránek, webů | |
Technický | |
Marketing | |
Společnost a kultura |
Sémantický web | |
---|---|
Základy | |
Pododdíly |
|
Aplikace |
|
související témata | |
Normy |
|
http | |
---|---|
Obecné pojmy |
|
Metody | |
Tituly |
|
Stavové kódy |