• 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