Jak vypadá žádost o získání. Použití metod GET a POST
V dnešní době se nejčastěji používají pouze dvě metody HTTP: GET a POST. Ukázalo se však, že i mezi těmito dvěma „borovicemi“ se webovým vývojářům daří zabloudit. Existuje pro to vysvětlení: obě metody lze použít k získání stejného výsledku. Musíme si však pamatovat, že bezmyšlenkovité použití kterékoli z metod může vést ke katastrofálním následkům, včetně těžkých nákladů na kanál a bezpečnostních děr.
Abyste tomu zabránili, stačí jednoduše podrobněji porozumět účelu a rozdílům těchto metod.
Pokud se ponoříte do významu názvů metod, mnohé bude jasnější. GET (z angličtiny přijímat), tzn. by měl být použit k dotazování na data. POST (z angl. send by mail) – slouží k odesílání dat na server. Vše se zdá být extrémně jednoduché a jasné. Ale kdo chce vyvíjet weby trochu složitější než vizitkový web s jedním formulářem zpětné vazby, je lepší se s problematikou lépe seznámit.
Zabezpečené a nezabezpečené požadavky HTTP
Specifikace HTTP 1.1 zavádí dva pojmy: zabezpečený a nezabezpečený požadavek, přesněji řečeno, metoda.
Bezpečné metody jsou metody, které mohou vyžadovat pouze informace. Nemohou změnit požadovaný zdroj ani nemohou vést k nežádoucím výsledkům pro uživatele, ostatní nebo server. Příklady bezpečných jsou požadavky na HTML kód webové stránky nebo obrázku. Mezi bezpečné metody patří HEAD a GET.
Poznámka
Ve skutečnosti mohou řemeslníci samozřejmě s požadavky GET ublížit. Například smyčky dotazů.
Nebezpečné dotazy, jak již všichni uhodli, mohou mít potenciálně špatné důsledky, pokud jsou znovu použity. Takové požadavky mohou změnit obsah zdroje, ke kterému se přistupuje. Příklady takových požadavků: zasílání zpráv, registrace, online platby. Mezi nebezpečné metody patří POST, PUT, DELETE.
Idempotentní metody
Idempotence je vlastnost metod, které při četných opakovaných voláních vrátí stejný výsledek, s výjimkou případů, kdy jsou informace zastaralé. To znamená, že při přístupu na stejnou adresu URL se všem uživatelům zobrazí stejná webová stránka, obrázek, video atd. Tuto vlastnost mají metody GET, PUT, DELETE.
Nyní se podívejme blíže na samotné metody GET a POST: udělejme pro každou z nich krátké „shrnutí“.
DOSTAT
- navržený pro příjem dat ze serveru;
- tělo požadavku je prázdné;
- zpracovávány na straně serveru rychleji as menší spotřebou serverových zdrojů díky prázdnému tělu požadavku;
- přenos proměnných probíhá v adresním řádku (takto to vidí uživatel; technicky se data přenášejí v řádku dotazu) a jsou tedy viditelné informace o proměnných a jejich hodnotách (data nejsou chráněna);
- je schopen přenést malé množství dat na server: existují omezení na délku URL, která závisí na prohlížeči, například IE6 = 2Kb. Vývojáři Yahoo! doporučují zaměřit se na toto číslo;
- může přenášet pouze znaky ASCII;
- takový požadavek lze zkopírovat a uložit (například do záložek);
- požadavek lze uložit do mezipaměti (to lze ovládat);
- pro další snížení zatížení kanálu a serveru jsou k dispozici podmíněné a částečné požadavky;
- nepřeruší připojení HTTP (pokud je na serveru povolen režim keepAlive).
POŠTA
- určené pro odesílání dat na server;
- přenos dat probíhá v těle požadavku;
- zpracování na straně serveru je pomalejší a „těžší“ než GET, protože kromě hlaviček musí být analyzováno i tělo požadavku;
- schopné přenášet velké množství dat;
- schopný přenášet soubory;
- stránku vygenerovanou metodou POST nelze uložit jako záložky;
- přeruší připojení HTTP;
- Pro přenos i velmi malého množství informací posílá většina prohlížečů alespoň dva TCP pakety: hlavičku a poté tělo požadavku.
Ukazuje se, že tyto dvě metody nejsou tak podobné. Použití jednoho nebo druhého by mělo být určeno aktuálním úkolem, a ne skutečností, že GET se používá ve výchozím nastavení nebo se s ním snadněji pracuje. GET je samozřejmě ve většině případů lepší varianta, zejména při budování rychlého AJAXu, ale nezapomínejte na jeho nevýhody. Pro sebe jsem si udělal jednoduchý algoritmus-poznámku o výběru metody.
Tento příspěvek je odpovědí na otázku položenou v jednom z mých článků.
V tomto článku vám chci říci, co jsou HTTP metody GET/POST/PUT/DELETE a další, proč byly vynalezeny a jak je používat v souladu s REST.
HTTP
Jaký je tedy jeden z hlavních protokolů internetu? Pedanty pošlu do RFC2616 a zbytek řeknu lidsky :)Tento protokol popisuje interakci mezi dvěma počítači (klient a server), postavenou na základě zpráv nazývaných požadavek (Request) a odpověď (Response). Každá zpráva se skládá ze tří částí: počátečního řádku, záhlaví a těla. V tomto případě je vyžadována pouze startovní čára.
Počáteční čáry požadavku a odpovědi mají různé formáty – zajímá nás pouze počáteční čára požadavku, která vypadá takto:
URI metody HTTP/ VERZE ,
Kde METHOD je metoda požadavku HTTP, URI je identifikátor zdroje, VERZE je verze protokolu (aktuálně je aktuální verze 1.1).
Záhlaví jsou kolekce párů název-hodnota oddělených dvojtečkou. Hlavičky poskytují různé informace o službě: kódování zprávy, název a verzi prohlížeče, adresu, ze které klient přišel (Referrer) atd.
Tělo zprávy jsou skutečná přenášená data. V odpovědi jsou přenášenými daty zpravidla HTML stránka, kterou prohlížeč požadoval, a v požadavku se například v těle zprávy přenáší obsah souborů nahraných na server. Ale zpravidla v požadavku není vůbec žádné tělo zprávy.
Příklad interakce HTTP
Podívejme se na příklad.Žádost:
GET /index.php HTTP/1.1 Host: example.com 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
První řádek je řádek dotazu, zbytek jsou záhlaví; tělo zprávy chybí
Odpovědět:
HTTP/1.0 200 OK Server: nginx/0.6.31 Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Připojení: zavřít ... SAMA STRÁNKA HTML...
Zdroje a metody
Vraťme se na počáteční řádek požadavku a pamatujme, že obsahuje takový parametr, jako je URI. To je zkratka pro Uniform Resource Identifier – jednotný identifikátor zdroje. Zdrojem je zpravidla soubor na serveru (příklad URI je v tomto případě „/styles.css“), ale obecně může být zdrojem také nějaký abstraktní objekt („/blogs/webdev/“ - body na vývoj bloku „Web“ spíše než na konkrétní soubor).Typ požadavku HTTP (také nazývaný metoda HTTP) říká serveru, jakou akci chceme se zdrojem provést. Zpočátku (začátkem 90. let) se předpokládalo, že klient může od zdroje chtít pouze jednu věc – přijímat jej, ale nyní můžete pomocí protokolu HTTP vytvářet příspěvky, upravovat profil, mazat zprávy a mnoho dalšího. A tyto akce je obtížné kombinovat s pojmem „příjem“.
Pro odlišení akcí od zdrojů na úrovni metod HTTP byly vynalezeny následující možnosti:
- GET - získání zdroje
- POST - vytvoření zdroje
- PUT - aktualizace zdroje
- DELETE - odstranění zdroje
Do hry vstupuje REST
REST (REpresentational State Transfer) je termín zavedený v roce 2000 Royem Fieldingem, jedním z vývojářů protokolu HTTP, jako název skupiny principů pro tvorbu webových aplikací. Obecně REST pokrývá širší oblast než HTTP – lze jej použít i v jiných sítích s jinými protokoly. REST popisuje principy interakce mezi klientem a serverem na základě konceptů „zdroj“ a „sloveso“ (lze chápat jako předmět a predikát). V případě HTTP je zdroj identifikován svým URI a slovesem je metoda HTTP.REST navrhuje upustit od používání stejného URI pro různé zdroje (tj. adresy dvou různých článků jako /index.php?article_id=10 a /index.php?article_id=20 – toto není cesta REST) a použití různých metod HTTP pro různé akce. To znamená, že webová aplikace napsaná pomocí přístupu REST smaže zdroj při přístupu k němu metodou HTTP DELETE (samozřejmě to neznamená, že je nutné dát možnost smazat vše a všechny, ale žádný požadavek aplikace na odstranění musí používat metodu HTTP DELETE).
REST dává programátorům možnost psát standardizované a o něco hezčí webové aplikace než dříve. Při použití REST nebude URI pro přidání nového uživatele /user.php?action=create (metoda GET/POST), ale jednoduše /user.php (přísně metoda POST).
Výsledkem je, že kombinací stávající specifikace HTTP a přístupu REST dávají různé metody HTTP konečně smysl. GET - vrátí zdroj, POST - vytvoří nový, PUT - aktualizuje existující, DELETE - smaže jej.
problémy?
Ano, s používáním REST v praxi je malý problém. Tento problém se nazývá HTML.Požadavky PUT/DELETE lze posílat pomocí XMLHttpRequest tím, že ručně kontaktujete server (řekněme přes curl nebo dokonce přes telnet), ale nemůžete vytvořit HTML formulář, který odešle plnohodnotný požadavek PUT/DELETE.
Jde o to, že specifikace HTML vám neumožňuje vytvářet formuláře, které odesílají data jinak než prostřednictvím GET nebo POST. Proto, abyste mohli normálně pracovat s jinými metodami, musíte je uměle napodobit. Například v Racku (mechanismus, na jehož základě Ruby interaguje s webovým serverem; Rails, Merb a další frameworky Ruby jsou vytvořeny pomocí Racku), můžete do formuláře přidat skryté pole s názvem „_method“ a zadejte název metody jako hodnotu (např. "PUT") - v tomto případě bude odeslán požadavek POST, ale Rack bude moci předstírat, že přijal PUT spíše než POST.
Dnes jsem se chtěl trochu ponořit do primitivních věcí a popsat, co se dá na World Wide Web najít ve velkém množství a bez větších potíží. Budeme mluvit prakticky o svatyni protokolu HTTP: požadavcích POST a GET.
Mnozí se budou ptát proč? Odpovím stručně a jasně: ne každý ví, co to je a proč je to potřeba, a kdo se o tom chce dozvědět (a přitom v IT oblasti rozumí málo), často nerozumí tomu, co se píše v mnoha a mnoha článcích věnovaných tomuto téma. Pokusím se prsty vysvětlit, co jsou požadavky POST a GET a k čemu slouží.
Začněme tedy naši cestu do pohádky...
Pokud čtete tuto zprávu, pak alespoň víte, jak vypadá internet a co je to internetová stránka. Po vynechání všech složitostí práce World Wide Web budeme pracovat s pojmy jako uživatel a stránka. Ať už se dá říci cokoli, tyto dvě entity spolu musí nějak interagovat. Lidé spolu například komunikují pomocí gest, emocí a řeči, zvířata vydávají nějaké zvuky, ale co se stane, když člověk a internetový zdroj „komunikují“? Zde máme případ výměny informací, které lze přenést do lidské konverzace typu „otázka-odpověď“. Kromě toho může uživatel i stránka klást otázky a odpovědi. Když mluvíme o webové stránce, její otázky a odpovědi jsou zpravidla vždy vyjádřeny ve formě internetové stránky s tím či oním textem. Pokud jde o uživatele, pak se vše děje díky požadavkům GET a POST (samozřejmě nejen, ale mluvíme o nich).
Zjistili jsme tedy, že naše tematické objekty jsou nezbytné pro „komunikaci“ s weby. Kromě toho lze požadavky GET i POST použít k „kladení otázek“ webu a k „odpovídání“ na ně. Jak jsou odlišní? Všechno je docela jednoduché. Abychom však vysvětlili rozdíly, budeme muset zvážit příklad, pro který si vezmeme stránku plánu internetového obchodu.
Pravděpodobně jste si často všimli, když jste něco hledali v internetových obchodech, že při vyhledávání pomocí filtrů se adresa webu změní z krásné „http://magaazin.ru“ na děsivou „http://magaazin.ru/?category“ = boty&velikost=38". Takže vše, co následuje za symbolem '?', je váš požadavek GET na stránku, a abych byl zcela přesný, v tomto případě se stránky ptáte, co má v kategorii „Obuv“ od velikostí „38“ (tento příklad je převzato z mé hlavy, ve skutečnosti nemusí vše vypadat tak jasně). Výsledkem je, že můžeme klást otázky sami tím, že je označíme v adresním řádku webu. Je zřejmé, že tato metoda má několik nevýhod. Za prvé, kdokoli, kdo je vedle uživatele u počítače, může snadno špehovat všechna data, takže použití tohoto typu požadavku na přenos hesel je vysoce nežádoucí. Za druhé, existuje omezení délky řetězce, který lze přenést z pole adresy webu, což znamená, že nebude možné přenést mnoho dat. Nepochybnou výhodou použití požadavků GET je však snadné použití a schopnost rychle se dotazovat na web, což je užitečné zejména při vývoji, ale to je jiný příběh...
Nyní si promluvme o požadavcích POST. Chytří čtenáři si možná uvědomili, že hlavním rozdílem mezi tímto požadavkem a jeho protějškem je utajení přenášených dat. Pokud vezmeme v úvahu internetový obchod, nápadným příkladem použití požadavku POST je registrace na webu. Stránka vás požádá o údaje, vy tyto údaje vyplníte a kliknutím na tlačítko „Registrace“ odešlete odpověď. Navíc se tato data nebudou nijak externě zobrazovat. Za zmínku také stojí, že lze požadovat poměrně velké množství informací – a požadavek POST nemá žádná omezení. No, pokud sáhnete na mínus, pak takový požadavek nelze vygenerovat rychle. Bez speciálních dovedností to nemůžete udělat. I když ve skutečnosti není všechno tak složité, ale to je zase jiný příběh.
Pojďme si to shrnout. Požadavky POST a GET jsou potřebné pro „komunikaci“ mezi uživatelem a webem. Jsou ve své podstatě téměř opakem. Použití určitých typů dotazů závisí na konkrétní situaci a použití pouze jednoho typu dotazu je krajně nepohodlné.
Tento příspěvek je určen k vysvětlení principů přenosu dat na internetu pomocí dvou hlavních metod: GET a POST. Napsal jsem to jako doplněk k návodu ke generátoru rozvrhu směn pro ty, které pravděpodobně nebudou zajímat podrobnosti ☺.
Přejděte na následující adresu (toto je pro vizuální vysvětlení): http://calendarin.net/calendar.php?year=2016 Věnujte pozornost adresnímu řádku prohlížeče: calendarin.net/calendar.php ?rok=2016 Hlavní soubor je pojmenován, za ním následuje otazník (?) a parametr „rok“ s hodnotou „2016“. Takže vše, co následuje za otazníkem, je požadavek GET. Je to jednoduché. Chcete-li předat více než jeden parametr, musí být odděleny znakem ampersand (&). Příklad: calendarin.net/calendar.php ?year=2016&display=work-days-and-days-off
Hlavní soubor je stále pojmenován, následuje otazník (?), poté parametr „rok“ s hodnotou „2016“, poté ampersand (&), poté parametr „zobrazení“ s hodnotou „pracovní dny- a-dny" -vypnuto".
Parametry GET lze změnit přímo v adresním řádku prohlížeče. Například změnou hodnoty „2016“ na „2017“ a stisknutím klávesy se dostanete do kalendáře pro rok 2017.
Jedná se o skrytý přenos dat (adresa stránky se nemění); to znamená, že můžete vidět pouze to, co bylo přeneseno pomocí programu (skriptu). Například v následujícím nástroji pro počítání znaků v textu jsou původní data přenášena metodou POST: http://usefulonlinetools.com/free/character-counter.php
Pokud máte nějaké dotazy, připomínky a můj e-mail je vám k dispozici.
Kromě metody GET, kterou jsme probrali v předchozím příspěvku, existuje ještě jedna metoda pro odeslání požadavku přes protokol HTTP - metoda POST. V praxi je také velmi často využívána metoda POST.
Pokud jsme pro kontaktování serveru metodou GET stačili zadat požadavek do URL, pak v metodě POST vše funguje na jiném principu.
Abychom mohli tento typ požadavku provést, musíme kliknout na tlačítko s atributem type="submit", které se nachází na webové stránce. Upozorňujeme, že toto tlačítko se nachází v prvku
![](https://i0.wp.com/steptosleep.ru/wp-content/uploads/2018/06/92221.png)
Pokud uživatel zadá text do textového pole a klikne na tlačítko „Odeslat“, textová proměnná bude odeslána na server s hodnotou obsahu, který uživatel zadal.
POST a GET požadavky jednoduchými slovy
Tato proměnná bude odeslána pomocí metody POST.
Pokud to napíšete ve tvaru: