Co potřebujete vědět o protokolu HTTP jako webový vývojář. Pravidla protokolu HTTP
.) 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ž tento protokol je text.
Proxy servery
Historie vývoje
HTTP/0.9
Kromě obvyklé metody GET existují také . Podmíněné požadavky GET obsahují hlavičky If-Modified-Since , If-Match , If-Range a podobně. Částečné GETy obsahují v požadavku rozsah. Pořadí provedení podobné žádosti definovány normami samostatně.
HLAVA
Podobné jako metoda GET, s tím rozdílem, že v odpovědi serveru není žádné tělo. Požadavek HEAD se 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á.
POŠTA
Slouží k předání uživatelských dat danému zdroji. Například v blozích mohou návštěvníci obvykle zadávat 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 s blogy text komentáře) zahrnuta do těla požadavku. Podobně se metoda POST obvykle používá k nahrávání souborů na server.
Na rozdíl od metody GET není metoda POST považována za idempotentní, tedy za opakování téhož požadavky POST může vrátit různé výsledky (například po každém odeslání komentáře se objeví jedna kopie tohoto komentáře).
Pokud je výsledek 200 (OK), tělo odpovědi by mělo obsahovat zprávu o výsledku požadavku. Pokud byl prostředek vytvořen, server BY MĚL vrátit odpověď 201 (Vytvořeno) s URI nového prostředku v hlavičce Umístění.
Zpráva odpovědi serveru pro metodu POST není uložena v mezipaměti.
DÁT
Slouží ke stažení obsahu požadavku na URI specifikovaný v požadavku. Pokud pro daný URI neexistuje žádný zdroj, 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-* odeslané klientem spolu se zprávou. Pokud některá z těchto hlaviček nelze rozpoznat nebo není platná za aktuálních podmínek, musí být vrácen chybový kód 501 (Not Implemented).
Základní rozdíl mezi metodami POST a PUT spočívá v pochopení záměru URI zdrojů. Metoda POST předpokládá, že obsah odeslaný klientem bude zpracován na zadaném URI. Pomocí PUT klient předpokládá, že načítaný obsah odpovídá prostředku na daném URI.
Zprávy odpovědí serveru na metodu PUT se neukládají do mezipaměti.
NÁPLAST
Podobné jako PUT, ale vztahuje se pouze na fragment zdroje.
VYMAZAT
Odstraní zadaný prostředek.
STOPA
Vrá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.
ODKAZ
Přidruží zadaný zdroj k ostatním.
ODPOJIT
Odpojí zadaný zdroj od ostatních.
PŘIPOJIT
Transformuje připojení požadavku na transparentní tunel TCP/IP, obvykle k usnadnění vytvoření bezpečného SSL připojení prostřednictvím nešifrovaného proxy serveru.
Stavové kódy
Stavový kód je součástí prvního řádku odpovědi serveru. Je to celé číslo tří arabských číslic. První číslice označuje třídu stavu. Po kódu odpovědi obvykle následuje mezerou oddělená vysvětlující fráze anglický jazyk, která dané osobě vysvětlí 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 standardní a jsou popsány v příslušných dokumentech RFC. Zavedení nových kodexů by mělo být provedeno pouze po konzultaci s IETF. Klient nemusí znát všechny stavové kódy, ale musí reagovat podle třídy kódu.
V současnosti existuje pět tříd stavových kódů.
1xx Informační (rus. Informační)Tato třída obsahuje kódy, které informují o procesu přenosu. V HTTP/1.0 by zprávy s těmito kódy měly být ignorovány. 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 startovní čára odpověď 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 (rus. Úspěch)Zprávy tato třída informovat o případech úspěšného přijetí a vyřízení požadavku klienta. V závislosti na stavu může server odesílat také záhlaví a tělo zprávy.
3xx přesměrování (rus. přesměrovat )Kódy třídy 3xx sdělují klientovi, že pro úspěšné dokončení operace musí být proveden další požadavek (obvykle pomocí jiného URI). Z této třídy pět kódů , , , a přímo odkazuje na přesměrování (přesměrování). Adresu, na kterou má klient odeslat požadavek, určuje server v hlavičce Location. To umožňuje použití fragmentů v cílovém URI.
Chyba klienta 4xx (rus. Chyba klienta)Třída kódu 4xx je určena k označení chyb na straně klienta. Při použití všech metod kromě HEAD musí server vrátit uživateli hypertextové vysvětlení v těle zprávy.
Pro zapamatování hodnot kódů od 400 do 417 existují metody názorných mnemotechnických pomůcek
5xx Chyba serveru (rus. Chyba serveru)Pro případy neúspěšné operace z důvodu chyby serveru jsou přiděleny kódy 5xx. Pro všechny situace jiné než použití metody HEAD MUSÍ server zahrnout vysvětlení do těla zprávy, kterou klient zobrazí uživateli.
Tituly
Tělo zprávy
Tělo zprávy HTTP (tělo zprávy), 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 (tělo zprávy) se liší od těla entity (tělo entity) pouze v případě, že je použito kódování přenosu, jak je uvedeno v poli záhlaví Kódování přenosu.
tělo zprávy = tělo subjektu |
Pole Transfer-Encoding se 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 těla zprávy v požadavku je indikována přidáním pole záhlaví Content-Length nebo Transfer-Encoding do záhlaví požadavku. Tělo zprávy (tělo zprávy) MŮŽE být přidáno k požadavku pouze tehdy, když metoda požadavku umožňuje tělo entity.
Zda je tělo zprávy zahrnuto ve zprávě odpovědi, závisí na metodě požadavku i na kódu stavu odpovědi. Všechny odpovědi na požadavek s metodou HEAD nesmí obsahovat tělo zprávy (tělo zprávy), i když jsou přítomna pole záhlaví entity, aby se zdálo, že entita je přítomná. Žádné odpovědi se stavovými kódy 1xx (informační), 204 (žádný obsah) a 304 (nezměněno) nesmí obsahovat tělo zprávy. Všechny ostatní odpovědi obsahují tělo zprávy, i když má nulovou délku.
Příklady HTTP dialogů
Pravidelný požadavek GET
Existují dva hlavní typy dohod:
- Spravováno serverem. řízený serverem).
- Spravováno klientem Řízený agentem).
Oba typy lze používat současně nebo každý z nich samostatně.
Hlavní specifikace protokolu (RFC 2616) také zdůrazňuje takzvané transparentní vyjednávání (angl. Transparentní vyjednávání) jako preferovanou kombinaci obou typů. Druhý mechanismus by neměl být zaměňován s nezávislou technologií Transparent Content Negotiation (TCN). Transparentní vyjednávání obsahu , viz RFC 2295), 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 není viditelný pro klienta a server, zatímco v technologii TCN transparentnost znamená dostupnost kompletní seznam možnosti zdrojů pro všechny účastníky procesu doručování dat.
Spravováno serverem
Pokud existuje více verzí prostředku, server může analyzovat hlavičky požadavků klienta a vrátit to, co považuje za nejlepší. Analyzované hlavičky jsou Accept , Accept-Charset , Accept-Encoding , Accept-Languages a User-Agent. Je žádoucí, aby server zahrnul do odpovědi hlavičku Vary udávající parametry, kterými se obsah odlišuje požadovaným URI.
Geografickou polohu 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í osoba nebo organizace. Při registraci určíte region, ve kterém se bude požadovaný adresní prostor používat. Tyto údaje jsou veřejně dostupné a na internetu lze nalézt odpovídající volně distribuované databáze a již hotové softwarových modulů pracovat s nimi (měli byste se zaměřit na klíčová slova"GeoIP").
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 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:
- Server pouze předpokládá, která možnost je nejvýhodnější koncový uživatel, ale nemůže přesně vědět, co je potřeba v tento moment(například verze v ruštině nebo angličtině).
- Existuje mnoho hlaviček skupin Accept, ale jen málo zdrojů s více možnostmi. Z tohoto důvodu je zařízení přetíženo.
- Sdílená mezipaměť má omezenou schopnost vydávat stejnou odpověď na stejné požadavky od různých uživatelů.
- Předávání hlaviček Accept může také odhalit některé informace o jeho preferencích, jako jsou použité jazyky, prohlížeč, kódování.
Spravováno zákazníkem
V tento případ typ obsahu je určen pouze na straně klienta. Za tímto účelem server vrátí se stavovým kódem 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 extra zátěž, protože k získání požadovaného obsahu musíte podat další požadavek.
Transparentní schválení
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í.
Vícenásobný obsah
HTTP protokol 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 jako hierarchii s prvky vnořenými do sebe. Typy médií Multipart/* se používají k označení více obsahu. Práce s těmito typy se provádí podle hlavní pravidla, popsané v RFC 2046 (pokud není u konkrétního typu média uvedeno jinak). Pokud přijímač neumí s typem pracovat, pak se k němu chová stejně jako k multipart/mixed .
Parametr hranice znamená oddělovač mezi různé typy přenášené zprávy. Například parametr DestAddress předaný z formuláře předá hodnotu emailová adresa a element AttachedFile1 za ním odešle binární obsah obrázku .jpg
Na straně serveru mohou být zprávy s více obsahem odesílány jako odpověď na požadavky na více fragmentů zdrojů. V tomto případě je použit typ média multipart/byteranges.
Ze strany klienta se při odesílání HTML formuláře nejčastěji používá metoda POST. 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 , do které se integruje jako samostatné části zadané uživatelem, předmět dopisu, adresa příjemce, samotný text a přiložené soubory:
POST /send-message.html HTTP/1.1 Host: mail.example.com Referer: http://mail.example.com/send-message.html User-Agent: BrowserForDummies/4.67b Content-Type: multipart/form- data; boundary="Asrf456BGe4h" Délka obsahu: (celkový objem, včetně podřízených nadpisů) Připojení: keep-alive Keep-Alive: 300 (prázdný řádek) (chybí preambule) --Asrf456BGe4h Obsah-Dispozice: formulář-data; name="DestAddress" (prázdný řádek) [e-mail chráněný]--Asrf456BGe4h Obsah-Dispozice: formulář-data; name="MessageTitle" (prázdný řádek) Nesnáším --Asrf456BGe4h Content-Disposition: form-data; name="Text zprávy" (prázdný řádek) Ahoj Vasily! Ten lev, co jsi mi minulý týden nechal, mi roztrhal gauč. 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" Content-Type: image/jpeg (prázdný řádek) (binární obsah první fotografie) --Asrf456BGe4h Obsah-Dispozice: formulář-data; name="AttachedFile2"; filename="horor-photo-2.jpg" Content-Type: image/jpeg (prázdný řádek) (binární obsah druhé fotografie) --Asrf456BGe4h-- (chybí epilog)
V příkladu v záhlaví Content-Disposition se parametr name shoduje atribut názvu ve značkách HTML A
Funkce protokolu
Většina protokolů zajišťuje vytvoření relace TCP, během níž dojde k autorizaci jednou, a další akce provedené v rámci tohoto oprávnění. 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 potřebu spustit daný soubor na serveru a odesláním klientovi výsledky programu zapsaného v tomto souboru (v tomto případě může stejný soubor, v závislosti na argumentech požadavku a vlastních úvahách, generovat odpovědi odlišné typy- 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.
Poznámky
viz také
Odkazy
Umožňuje získat různé zdroje, jako jsou dokumenty HTML. Protokol HTTP je základem komunikace na internetu. HTTP je komunikační protokol klient-server, což znamená, že požadavky na server iniciuje příjemce, obvykle webový prohlížeč. Výsledný výsledný dokument bude rekonstruován z různých dílčích dokumentů, například ze samostatně přijatého textu, popisu struktury dokumentu, obrázků, video souborů, skriptů a mnoha dalších.
Klienti a servery se vzájemně ovlivňují výměnou jednotlivé zprávy(a ne datový tok). Zprávy odeslané klientem, obvykle webovým prohlížečem, se nazývají dotazy a jsou volány zprávy odeslané serverem odpovědi.
Přestože byl HTTP vyvinut na počátku 90. let, postupem času se vyvíjel díky své rozšiřitelnosti. HTTP je protokol aplikační vrstva, který k přeposílání svých zpráv nejčastěji využívá možností jiného protokolu - TCP (nebo TLS - secure TCP), nicméně k doručování takových zpráv lze teoreticky použít jakýkoli jiný spolehlivý transportní protokol. Díky své rozšiřitelnosti se používá nejen pro příjem hypertextových dokumentů nebo obrázků a videí klientovi, ale také pro přenos obsahu na servery například pomocí HTML formulářů. HTTP lze také použít k načtení pouze částí dokumentu za účelem aktualizace webové stránky na vyžádání.
Součásti systémů založených na HTTP
HTTP je protokol klient-server, to znamená, že požadavky jsou odesílány jednou stranou – uživatelským agentem (user-agent) (nebo proxy serverem). Nejčastěji je uživatelským agentem webový prohlížeč, ale může to být kdokoli, například robot, který surfuje na webu, aby doplnil a aktualizoval data indexování webových stránek pro vyhledávače.
Každá jednotlivá žádost žádost) je odeslána na server, který jej zpracuje a vrátí odpověď. Odezva). Mezi těmito požadavky a odpověďmi existuje mnoho prostředníků nazývaných proxy, kteří provádějí různé operace a fungují například jako brány nebo mezipaměti.
Ve skutečnosti je mezi prohlížečem a serverem mnohem více zprostředkujících zařízení, která hrají určitou roli při zpracování požadavku: směrovače, modemy a tak dále. Vzhledem k tomu, že Síť je postavena na základě systému úrovní (vrstev) interakce, jsou tito zprostředkovatelé „skryti“ na úrovni sítě a transportu. V tomto systému úrovní zabírá nejvíce HTTP nejvyšší úroveň, která se nazývá "aplikační" (nebo "aplikační vrstva"). Znalost síťových vrstev, jako je prezentace, relace, transport, síť, propojení a fyzická, nezbytná pro pochopení síťového provozu a řešení problémů možné problémy, nejsou vyžadovány k popisu a porozumění HTTP.
Klient: uživatelský agent
Uživatelský agent je jakýkoli nástroj nebo zařízení, které jedná jménem uživatele. Tato role náleží především webovému prohlížeči; v některých případech jsou uživatelští agenti programy, které používají inženýři a weboví vývojáři k ladění svých aplikací.
Prohlížeč Vždy je entita, která iniciuje požadavek. Server to nikdy nedělá (ačkoli během let webu byly vytvořeny mechanismy, které dokážou simulovat požadavky ze serveru).
Chcete-li zobrazit webovou stránku, prohlížeč odešle počáteční požadavek na načtení dokumentu HTML stránky. Poté prohlížeč tento dokument analyzuje a požádá další soubory, nutné k zobrazení obsahu webové stránky (spustitelné skripty, informace o rozložení stránky - CSS tabulky styly, další zdroje ve formě obrázků a video souborů). Prohlížeč dále všechny tyto zdroje propojí a zobrazí je uživateli ve formě jediného dokumentu – webové stránky. Skripty spouštěné samotným prohlížečem mohou v následujících fázích zpracování webové stránky přijímat další zdroje přes síť a prohlížeč podle toho aktualizuje pohled uživatele na tuto stránku.
Webová stránka je hypertextový dokument. To znamená, že některé části zobrazeného textu jsou odkazy, které lze aktivovat (obvykle kliknutím na tlačítko myši) za účelem získání a zobrazení nové webové stránky. To umožňuje uživateli vést svého uživatelského agenta při procházení webu. Prohlížeč překládá tyto „směry provozu“ do požadavků HTTP a poté interpretuje odpovědi HTTP uživatelsky přívětivým způsobem.
webový server
Na druhé straně komunikační kanál existuje server, který slouží sloužit) uživatele, který mu na požádání poskytne dokumenty. Z pohledu koncového uživatele je server vždy jeden virtuální stroj, který zcela nebo částečně generuje dokument, i když ve skutečnosti se může jednat o skupinu serverů, mezi kterými je zátěž vyvážena, tj. přerozdělují se požadavky od různých uživatelů, nebo o komplexní software který se dotazuje na jiné počítače (jako jsou mezipaměťové servery, databázové servery, aplikační servery elektronický obchod a další).
Server nemusí být nutně umístěn na stejném stroji a naopak – na stejném stroji může být umístěno (hostováno) několik serverů. Podle verze HTTP/1.1 a s hlavičkou Host mohou dokonce sdílet stejnou IP adresu.
Proxy
Mezi webovým prohlížečem a serverem jsou velký počet síťové uzly přenášející zprávy HTTP. Vzhledem k vrstvené struktuře většina z nich funguje i na dopravní síti resp fyzické úrovně, stává se transparentní na vrstvě HTTP a potenciálně snižuje výkon. Tyto operace aplikační vrstvy se nazývají proxy . Mohou nebo nemusí být transparentní (úpravy požadavků neprojdou) a mohou vykonávat různé funkce:
- ukládání do mezipaměti (mezipaměť může být veřejná nebo soukromá jako mezipaměť prohlížeče)
- filtrování (jako antivirové skenování, rodičovská kontrola, …)
- vyvažování zátěže (nechte více serverů obsluhovat různé požadavky)
- autentizace (řízení přístupu k různým zdrojům)
- logování (oprávnění k ukládání historie operací)
Základní aspekty HTTP
HTTP – jednoduché
I přes větší složitost zavedenou v HTTP/2 zapouzdřením zpráv HTTP do rámců je HTTP obecně jednoduchý a čitelný pro člověka. Zprávy HTTP mohou lidé číst a rozumět jim, což poskytuje snazší testování pro vývojáře a snižuje složitost pro nové uživatele.
HTTP - rozšiřitelný
Zavedení HTTP hlaviček v HTTP/1.0 usnadnilo rozšíření a experimentování protokolu. Novou funkcionalitu lze dokonce zavést jednoduchou dohodou mezi klientem a serverem o sémantice nové hlavičky.
HTTP je bezstavový, ale má relaci
HTTP je bezstavový: neexistuje žádný vztah mezi dvěma požadavky, které jsou prováděny postupně přes stejné připojení. To okamžitě implikuje možnost problémů pro uživatele při pokusu o interakci s určitou stránkou v sekvenci, například při použití nákupního košíku v elektronickém obchodě. Ale zatímco jádro HTTP je bezstavové, soubory cookie umožňují stavové relace. Pomocí rozšiřitelnosti záhlaví se do pracovního vlákna přidávají soubory cookie, což umožňuje relaci sdílet určitý kontext nebo stav při každém požadavku HTTP.
HTTP a připojení
Připojení je spravováno na úrovni transportu, a proto zásadně přesahuje HTTP. Zatímco HTTP nevyžaduje, aby základní transportní protokol byl založen na připojení, vyžaduje pouze spolehlivost nebo žádné ztracené zprávy (tj. alespoň představující chybu). Mezi dvěma nejběžnějšími internetovými přenosovými protokoly je TCP spolehlivý, zatímco UDP nikoli. HTTP se následně spoléhá na standard TCP, který je založen na připojení, i když připojení není vždy vyžadováno.
HTTP/1.0 otevřelo připojení TCP pro každou výměnu požadavku/odpovědi se dvěma důležitými nevýhodami: otevření připojení vyžaduje výměnu více zpráv, a proto je pomalé, i když se stává efektivnější, když je odesíláno více zpráv nebo když jsou zprávy odesílány pravidelně: teplý sloučeniny jsou účinnější než Studený.
Pro zmírnění těchto nedostatků zavedl HTTP/1.1 pipelining (který se ukázal jako obtížně implementovatelný) a stabilní spojení: ležet v na bázi TCP připojení lze částečně ovládat přes hlavičku Connection. HTTP/2 to posunulo o krok dále přidáním multiplexování zpráv přes jednoduché připojení, což pomáhá udržovat připojení teplé a efektivnější.
Probíhají experimenty, aby se vyvinulo to nejlepší transportní protokol, vhodnější pro HTTP. Google například experimentuje s QUIC, který je založen na UDP, aby poskytl spolehlivější a efektivnější přenosový protokol.
Co lze ovládat přes HTTP
Přirozená rozšiřitelnost HTTP umožnila postupem času větší kontrolu a funkčnost webu. Mezipaměť a metody ověřování byly ranými funkcemi v historii HTTP. Schopnost uvolnit původní omezení byla naopak přidána v roce 2010.
Následující jsou obecné funkce, spravované pomocí HTTP.
-
Server může dát proxy a klientům pokyn, co ukládat do mezipaměti a jak dlouho. Klient může dát pokyn mezipaměti proxy, aby ignorovaly uložené dokumenty. - Relaxační omezení zdroje
Aby se zabránilo spywaru a dalšímu narušení soukromí, webový prohlížeč vynucuje přísné oddělení webových stránek. Pouze stránky z stejný zdroj má přístup k informacím na webové stránce. Ačkoli taková omezení zatěžují server, hlavičky HTTP mohou uvolnit přísnou segregaci na straně serveru a umožnit dokumentu, aby byl součástí informací z různých domén (z bezpečnostních důvodů). - Autentizace
Některé stránky jsou dostupné pouze speciálním uživatelům. Základní autentizaci lze zajistit přes HTTP, buď pomocí hlavičky WWW-Authenticate a podobně, nebo nastavením speciální relace pomocí cookies. - Proxy a tunelování
Servery a/nebo klienti jsou často umístěni na intranetu a skrývají své skutečné IP adresy před ostatními. HTTP požadavky projít přes proxy tuto síťovou bariéru. Ne všechny proxy jsou HTTP proxy. Na nižší úrovni funguje například protokol SOCKS. Ostatní, jako je ftp, mohou být zpracovány těmito proxy. - Relace
Používání HTTP cookie umožňuje přiřadit požadavek ke stavu na serveru. Tím se vytvoří relace, i když jádro HTTP je bezstavový protokol. To je užitečné nejen pro nákupní košíky v internetových obchodech, ale také pro jakýkoli web, který umožňuje uživateli přizpůsobit výstup.
HTTP stream
Když chce klient komunikovat se serverem, ať už se jedná o cílový server nebo zprostředkující proxy, provede následující kroky:
- Otevření TCP spojení: TCP spojení bude použito k odeslání požadavku nebo požadavků a přijetí odpovědi. Klient může otevřít nové připojení, znovu použít stávající nebo otevřít více připojení TCP k serveru.
- Odeslání zprávy HTTP: Zprávy HTTP (před HTTP/2) -- čitelné pro člověka. Počínaje HTTP/2 jsou jednoduché zprávy zapouzdřeny do rámců, což znemožňuje jejich přímé čtení, ale v zásadě zůstávají stejné. GET / HTTP/1.1 Hostitel: site Accept-Language: fr
- Přečíst odpověď ze serveru: HTTP/1.1 200 OK Datum: So, 09. října 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-74075b"47 Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html
- Uzavře nebo znovu použije připojení pro další požadavky.
Pokud je povolen kanál HTTP, lze odeslat více požadavků bez čekání na přijetí první úplné odpovědi. HTTP kanál je silně zabudován do stávajících sítí, kde staré kusy softwaru koexistují s moderními verzemi. Potrubí HTTP bylo v HTTP/2 nahrazeno spolehlivějšími multiplexními požadavky v rámci.
HTTP zprávy
HTTP/1.1 a starší zprávy HTTP jsou čitelné pro člověka. Ve verzi HTTP/2 jsou tyto zprávy zasazeny do nové binární struktury, rámce, umožňující optimalizace, jako je komprese záhlaví a multiplexování. I když je část původní zprávy HTTP odeslána v této verzi HTTP, sémantika každé zprávy se nezmění a klient znovu vytvoří (prakticky) původní požadavek HTTP. Je také užitečné pro pochopení zpráv HTTP/2 ve formátu HTTP/1.1.
HTTP (HyperText Transfer Protocol) byl vyvinut jako páteř World Wide Web.
Protokol HTTP funguje následovně: klientský program naváže TCP spojení se serverem (standardní číslo portu je 80) a odešle na něj HTTP požadavek. Server tento požadavek zpracuje a odešle klientovi odpověď HTTP.
Struktura požadavku HTTP
HTTP požadavek se skládá z hlavičky požadavku a těla požadavku oddělených prázdným řetězcem. Může chybět tělo požadavku.
Hlavička požadavku se skládá z hlavního (prvního) řádku požadavku a následujících řádků, které zpřesňují požadavek v hlavním řádku. Mohou také chybět následující řádky.
Požadavek v hlavním řádku se skládá ze tří částí oddělených mezerami:
Metoda(jinými slovy, příkaz HTTP):
DOSTAT- žádost o dokument. Nejčastěji používaná metoda; v HTTP/0.9 říkají, že to bylo jediné.
HLAVA- žádost o název dokumentu. Od GET se liší tím, že se vrací pouze hlavička požadavku s informacemi o dokumentu. Samotný doklad se nevydává.
POŠTA- tato metoda se používá k předávání dat do CGI skriptů. Vlastní data následují v následujících řádcích dotazu jako parametry.
DÁT- umístěte dokument na server. Pokud vím, používá se jen zřídka. Požadavek s touto metodou má tělo, ve kterém je předán samotný dokument.
Zdroj je cesta ke konkrétnímu souboru na serveru, který chce klient přijmout (nebo umístit - u metody PUT). Pokud je prostředkem pouze soubor ke čtení, server jej MUSÍ vrátit v těle odpovědi na daný požadavek. Pokud je to cesta k nějakému CGI skriptu, pak server skript spustí a vrátí výsledek jeho provedení. Mimochodem, díky takovému sjednocení zdrojů je klientovi prakticky lhostejné, co na serveru je.
Verze protokolu-verze protokolu HTTP, se kterým klientský program pracuje.
Jednoduchý HTTP požadavek tedy může vypadat takto:
To vyžaduje kořenový soubor z kořenového adresáře webového serveru.
Řádky za hlavním řetězcem dotazu mají následující formát:
Parametr: hodnota.
Takto se nastavují parametry požadavku. Toto je nepovinné, všechny řádky za hlavním řetězcem dotazu mohou chybět; v tomto případě server akceptuje jejich výchozí hodnotu nebo na základě výsledků předchozího požadavku (při práci v režimu Keep-Alive).
Zde jsou některé z nejběžnějších parametrů požadavku HTTP:
spojení(spojení) - může nabývat hodnot Keep-Alive a close. Keep-Alive ("uchovat naživu") znamená, že po vydání tohoto dokumentu není přerušeno spojení se serverem a lze zadávat další požadavky. Většina prohlížečů pracuje v režimu Keep-Alive, protože vám umožňuje „stáhnout“ html stránku a obrázky pro ni v jednom připojení k serveru. Jakmile je nastaveno, Keep-Alive přetrvává až do první chyby nebo explicitně specifikované v dalším požadavku Connection: close.
zavřít - Spojení je ukončeno po odpovědi na tento požadavek.
Uživatelský agent- hodnota je "kódové označení" prohlížeče, například:
Mozilla/4.0 (kompatibilní; MSIE 5.0; Windows 95; DigExt)
akceptovat- seznam typů obsahu podporovaných prohlížečem v pořadí podle jejich preference tímto prohlížečem, například pro můj IE5:
Přijmout: obrázek/gif, obrázek/x-xbitmap, obrázek/jpeg, obrázek/pjpeg, aplikace/vnd.ms-excel, aplikace/msword, aplikace/vnd.ms-powerpoint, */*
To je samozřejmě nutné pro případ, kdy server může vydat stejný dokument v různých formátech.
Hodnotu tohoto parametru využívají především CGI skripty pro generování odpovědi přizpůsobené pro daný prohlížeč.
Referent– Adresa URL, ze které přešli na tento zdroj.
Hostitel- název hostitele, ze kterého je zdroj požadován. Je užitečné, pokud má server několik virtuálních serverů pod stejnou IP adresou. V tomto případě je název virtuálního serveru určen z tohoto pole.
Přijímací jazyk- podporovaný jazyk. Důležité pro server, který může poskytovat stejný dokument v různých jazykových verzích.
Formát odpovědi HTTP
Formát odpovědi je velmi podobný formátu požadavku: má také záhlaví a tělo oddělené prázdným řádkem.
Záhlaví se také skládá z hlavního řádku a řádků parametrů, ale formát hlavního řádku se liší od formátu záhlaví požadavku.
Hlavní řetězec dotazu se skládá ze 3 polí oddělených mezerami:
Verze protokolu- podobně jako odpovídající parametr požadavku.
Chybový kód- kódové označení "úspěšnosti" požadavku. Kód 200 znamená „vše je v pořádku“ (OK).
Slovní popis chyby- "dešifrování" předchozího kódu. Například pro 200 je to OK, pro 500 je to Internal Server Error.
Nejběžnější parametry odezvy http jsou:
spojení- podobně jako odpovídající parametr požadavku.
Pokud server nepodporuje Keep-Alive (takové jsou), pak je hodnota Connection v odpovědi vždy blízko.
Proto je podle mého názoru správná taktika prohlížeče následující:
1. v žádosti o připojení zadejte: Keep-Alive;
2. Posuďte stav připojení podle pole Připojení v odpovědi.
typ obsahu("typ obsahu") - obsahuje označení typu obsahu odpovědi.
V závislosti na hodnotě Content-Type prohlížeč zachází s odpovědí jako s HTML stránkou, obrázkem gif nebo jpeg, souborem k uložení na disk nebo něčím jiným a provede příslušnou akci. Hodnota Content-Type pro prohlížeč je stejná jako hodnota přípony souboru pro Windows.
Některé typy obsahu:
text/html - text ve formátu HTML (webová stránka);
text/plain - prostý text (podobně jako "poznámkový blok");
image/jpeg - obrázek ve formátu JPEG;
image/gif - totéž, ve formátu GIF;
application/octet-stream – Proud „oktetů“ (tj. pouze bajtů), které mají být zapsány na disk.
Ve skutečnosti existuje mnohem více typů obsahu.
délka obsahu("délka obsahu") - délka obsahu odpovědi v bajtech.
Naposledy změněno(„Poslední úprava“) – datum, kdy byl dokument naposledy upraven.
Protokol HTTP (HyperText Transfer Protocol) je protokol aplikační vrstvy, který umožňuje aplikacím komunikovat v rámci distribuovaných, kolaborativních nebo heterogenních informačních systémů. Protokol umožňuje aplikacím vyměňovat si data prezentovaná v lidsky čitelné formě.
Jak již název napovídá, HTTP byl původně navržen pro přenos mezi aplikacemi tzv. hypertextu (hypertext), což je speciální druh dat vytvořený v souladu se standardem HTML (HyperText Markup Language). Hypertextový dokument se skládá z dat označených HTML tagy a je kombinací textu, obrázků, hypertextových odkazů a dalších prostředků prezentace dat. Hypertextové odkazy – jedna z nejdůležitějších součástí HTML dokumentu – jsou interaktivní oblasti, jejichž dopad vede k příjmu dat spojených s hypertextovým odkazem. To umožňuje uživateli pracujícímu s hypertextovými informacemi procházet v rámci souboru dokumentů nebo dokonce celého internetu a získávat informace, které ho zajímají, pomocí kontextových hypertextových odkazů.
Protokol HTTP je nadstavbou nad protokolem TCP a je prostředkem kontroly obsahu přenášených dat. Na rozdíl od TCP, které nebralo v úvahu strukturu přenášených paketů, HTTP vkládá do dat metainformace, které příjemci umožňují správně interpretovat přijatá data. HTTP je základem pro globální Internet (také nazývaný World Wide Web nebo WWW). První verze protokolu - HTTP / 0.9 - měla spíše omezené možnosti, ale s aktivním rozvojem celosvětové sítě se objevily nové verze: HTTP / 1.0 a HTTP / 1.1, které umožňují řídit přenos nejen hypertextových informací. přes počítačové sítě, ale také libovolné binární soubory: zvukové, grafické, archivní atd.
Vzhledem k tomu, že HTTP je doplněk nad protokolem TCP, existují také dvě strany přenosu dat: klient a server.
Klient je iniciátorem připojení a požaduje od serveru některá data nebo služby. Klientem je zpravidla program zvaný prohlížeč (prohlížeč), který umožňuje jak zobrazování hypertextových informací, tak přijímání souborů v jiných formátech. Aby klient získal nějaké zajímavé informace, odešle na server požadavek obsahující popis požadovaných informací.
Server při přenosu dat přes HTTP se nazývá web server (web-server). Tento program zpracovává požadavky klientů, předává požadovaná data ve formě odpovědí (response), obsahujících kromě požadovaných dat i metainformace, které je popisují.
Získání údajů, které uživatele zajímají, se skládá z následujících kroků:
Uživatel zadá adresu zdroje, který ho zajímá, do řádku prohlížeče.
Prohlížeč na základě informací přijatých od uživatele a také s ohledem na jeho nastavení a konfiguraci operačního systému generuje požadavek.
Prohlížeč se připojí k serveru, případně na vzdáleném počítači, a předá mu požadavek.
Server, který požadavek analyzuje, provede potřebné akce: vygeneruje odpověď, včetně těla požadovaného dokumentu. Pokud se jedná o hypertextový dokument, je načten ze souboru nebo dynamicky generovaný skriptem. Odpověď také obsahuje informace o datech, která obsahuje.
Server odešle odpověď do prohlížeče.
Prohlížeč analyzuje odpověď a buď uloží přijatá data do souboru, nebo v případě hypertextového dokumentu analyzuje značky HTML a zobrazí dokument na obrazovce.
Nutno podotknout, že klientským programem může být nejen prohlížeč, nicméně všechny kroky, snad s výjimkou toho prvního, se stejně provedou.
Je třeba poznamenat, že zde uvažujeme o přímém připojení klienta k serveru obsahujícímu zájmové informace, to však není vždy možné vzhledem k různým okolnostem. V takovém případě může být spojení provedeno přes jeden nebo více mezilehlých spojovacích bodů. Tyto mezilehlé body lze rozdělit do tří skupin:
Proxy servery (proxy-server) - zprostředkující program, který vykonává funkce klienta i serveru za účelem vytváření požadavků jménem jiných klientů. Požadavky jsou obsluhovány proxy serverem nebo na něj předávány se změnami (v tomto případě se proxy nazývá neprůhledný) nebo beze změn (v tomto případě se proxy nazývá transparentní). Proxy server umožňuje skupině počítačů fungovat jako jeden klient, což se často používá při připojování místních sítí k Internetu.
Brána - jako proxy server vysílá požadavky, ale neměním je. Brána obdrží požadavek od klienta, jako by to byl server obsahující dotyčný zdroj. Klient tedy nemůže určit, zda se připojuje přes bránu nebo přímo k serveru obsahujícímu prostředek.
Tunel – zprostředkující program, který udržuje spojení. Přestože po navázání spojení není tunel považován za součást přenosu HTTP, spojení je obvykle iniciováno požadavkem HTTP. Tunel se ukončí, pokud alespoň jeden z účastníků výměny dat uzavře spojení.
Pro zachování funkčnosti přenosu dat při připojování přes mezilehlé body nejsou vyžadovány žádné změny požadavků a odpovědí, s výjimkou proxy serveru, kdy musí být v požadavku klienta obsažena další pole. Z pohledu serveru se však data vyměňují přímo s klientem, takže nedochází k žádným změnám požadavků. Při vývoji programu se proto nepočítalo s možností napojení přes mezilehlé body.
Požadavek zaslaný klientem na server slouží k přesné identifikaci požadovaného zdroje a obsahuje také informace nezbytné pro správné zpracování požadavku.
Ve své struktuře se žádost skládá ze tří částí:
Řetězec dotazu
Blok záhlaví
Řetězec dotazu se skládá ze tří polí oddělených mezerami (ASCII kód 20h, dále SP) a končí kombinací dvou znaků: návrat vozíku (ASCII kód 0Dh, dále CR) a posun řádku (ASCII kód 0Ah, dále LF) . Prvky řetězce dotazu jsou reprezentovány následujícími poli:
Metoda (metoda) - definuje metodu zpracování aplikovanou na požadovaný zdroj. V závislosti na zadané metodě se může formát požadavku lišit. Platné metody:
Při vývoji programu byla podporována pouze metoda GET, a to z toho důvodu, že prohlížeč tuto metodu specifikuje ve standardně vytvořeném požadavku.
URI (Universal Resource Identifier) zdroj (URI zdroje) - označuje umístění požadovaného zdroje ve standardizovaném formátu, to znamená, že je to adresa zdroje. Při použití metody GET může tento řetězec obsahovat sadu parametrů předávaných serveru ve formě řetězců ve formátu „název_parametru = hodnota_parametru“, oddělených znaky ampersand `&. Blok parametrů je na konci Řetězec URI a je oddělen od adresy znakem otazníku `?".
Verze protokolu HTTP - při vývoji programu byla implementována podpora pro příjem požadavků odpovídajících verzím 1.0 a 1.1, které odpovídají řetězcům "HTTP/1.0" a "HTTP/1.1".
Blok záhlaví následující za řetězcem dotazu se může skládat z jednoho nebo více záhlaví:
Hlavička požadavku – obsahuje pole, která slouží jako modifikátory požadavku a obsahují informace o požadavku a konfiguraci klientského počítače.
Hlavička objektu – pokud požadavek obsahuje nějaký objekt (libovolnou sadu dat), pole této hlavičky popisují objekt s uvedením jeho formátu, kódování a dalších parametrů.
Obecná hlavička – obsahuje parametry služby nezbytné pro zajištění správného přenosu a povolení doplňkových služeb, jako je ukládání do mezipaměti.
Záhlaví je zakončeno dvěma páry znaků CR a LF, což usnadňuje určení konce příjmu požadavku, protože požadavek sám takovou kombinaci znaků obsahovat nemůže.
Odpověď zaslanou serverem klientovi může být vygenerována pouze jako výsledek zpracování požadavku klienta. Obsahuje popis výsledků požadavku, a pokud byla data požadována, obsahuje požadovaný zdroj.
Ve své struktuře se odpověď skládá z následujících částí:
Stavový řádek
Blok záhlaví
Stavový řádek se skládá ze tří polí oddělených znaky SP a končí posloupností znaků CR, LF. Prvky stavového řádku:
Verze protokolu HTTP - vyvíjený program vždy používá řetězec "HTTP/1.1".
Stavový kód (stavový kód) – třímístný číselný kód, který identifikuje výsledek požadavku. Ačkoli standard definuje poměrně velkou sadu stavových kódů, v programu se používají následující kódy:
- 200 - úspěšné provedení;
- 400 - neplatný požadavek;
- 401 - neoprávněný přístup;
- 404 - zdroj nenalezen;
- 405 - nepoužitelná metoda;
- 505 je nepodporovaná verze HTTP.
Důvodová fráze – krátká fráze, která vysvětluje stavový kód požadavku. Norma navrhuje standardní sadu frází, ale tato sada byla v programu poněkud upravena.
Blok záhlaví po stavovém řádku se může skládat z jednoho nebo více záhlaví:
Záhlaví požadavku
Název objektu
Obecné záhlaví
Nadpisy byly podrobně probrány v 2.2.3.3.
Záhlaví končí dvěma dvojicemi znaků CR a LF, za nimiž následuje libovolná sada znaků - objekt. Když je program spuštěn, takovými objekty mohou být pouze hypertextové dokumenty ve formátu HTML, dynamicky generované zásuvnými moduly.
Vaši pozornost vyzýváme k popisu hlavních aspektů protokolu HTTP - síťového protokolu, který od počátku 90. let až dodnes umožňuje vašemu prohlížeči stahovat webové stránky. Tento článek je napsán pro ty, kteří s prací s počítačovými sítěmi a vývojem síťových aplikací teprve začínají a pro které je stále těžké si sami přečíst oficiální specifikace.
http- široce používaný protokol přenosu dat, původně určený pro přenos hypertextových dokumentů (tedy dokumentů, které mohou obsahovat odkazy umožňující organizovat přechod na jiné dokumenty).
Zkratka HTTP znamená Hyper Text Transfer Protocol, "Hypertext Transfer Protocol". Podle specifikace OSI je HTTP protokol aplikační (horní, 7.) vrstvy. Aktuální verze protokolu, HTTP 1.1, je popsána ve specifikaci RFC 2616.
Protokol HTTP předpokládá použití struktury přenosu dat klient-server. Klientská aplikace vytvoří požadavek a odešle jej na server, načež serverový software tento požadavek zpracuje, vygeneruje odpověď a odešle ji zpět klientovi. Poté může klientská aplikace pokračovat v zasílání dalších požadavků, které budou zpracovány stejným způsobem.
Úkolem, který se tradičně řeší pomocí protokolu HTTP, je výměna dat mezi uživatelskou aplikací, která přistupuje k webovým zdrojům (obvykle webový prohlížeč) a webovým serverem. V současnosti je práce World Wide Webu zajištěna právě díky protokolu HTTP.
HTTP se také často používá jako komunikační protokol pro další protokoly aplikační vrstvy, jako je SOAP, XML-RPC a WebDAV. V takovém případě se říká, že protokol HTTP se používá jako „transport“.
API mnoha softwarových produktů také předpokládá použití HTTP pro přenos dat - samotná data mohou být v jakémkoli formátu, například XML nebo JSON.
Přenos dat protokolem HTTP se zpravidla provádí přes spojení TCP / IP. Serverový software obvykle používá port TCP 80 (a pokud port není výslovně uveden, klientský software obvykle používá port 80 ve výchozím nastavení pro otevírání připojení HTTP), ačkoli lze použít jakýkoli jiný port.
Jak odeslat požadavek HTTP?
Nejjednodušší způsob, jak se vypořádat s protokolem HTTP, je pokusit se o ruční přístup k nějakému webovému zdroji. Představte si, že jste prohlížeč a máte uživatele, který opravdu chce číst články Anatoly Alizara.Předpokládejme, že do adresního řádku zadal následující:
http://alizar.site/
V souladu s tím se nyní jako webový prohlížeč musíte připojit k webovému serveru na adrese alizar.site.
K tomu můžete použít jakýkoli vhodný nástroj příkazového řádku. Například telnet:
Telnet alizar.site 80
Abychom to hned objasnili, pokud si to náhle rozmyslíte, stiskněte Ctrl + "] a poté zadejte - to vám umožní ukončit připojení HTTP. Kromě telnetu můžete zkusit nc (nebo ncat) - podle chuti.
Po připojení k serveru musíte odeslat požadavek HTTP. To je mimochodem velmi snadné - HTTP požadavky se mohou skládat pouze ze dvou řádků.
Abyste mohli vytvořit požadavek HTTP, musíte sestavit počáteční řádek a také nastavit alespoň jednu hlavičku - to je hlavička Host, která je povinná a musí být přítomna v každém požadavku. Faktem je, že převod názvu domény na IP adresu se provádí na straně klienta, a proto, když otevřete připojení TCP, vzdálený server nemá žádné informace o tom, která adresa byla použita pro připojení: může to být například adresa alizar..ru nebo m.. Ve skutečnosti je však síťové připojení ve všech případech otevřeno uzlem 212.24.43.44, a i když zpočátku, při otevírání připojení, nikoli touto IP adresou byla zadána, ale někteří nejsou nijak informováni - proto je nutné tuto adresu předat v hlavičce Host.
Počáteční (počáteční) řetězec dotazu pro HTTP 1.1 je složen takto:
Například (takový počáteční řádek může znamenat, že je požadována hlavní stránka webu):
A samozřejmě nezapomeňte, že jakákoli technologie se stane mnohem jednodušší a přehlednější, když ji skutečně začnete používat.
Hodně štěstí a příjemné učení!
Štítky:
- http
- alizar
- spdy