abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 12:11 | Zajímavý software

Do pondělí 14. června do 19:00 lze na Humble Bundle získat zdarma počítačovou hru Surviving Mars - Deluxe Edition (YouTube) běžící také na Linuxu.

Ladislav Hagara | Komentářů: 0
11.6. 17:55 | Zajímavý software

RTS (Real-time strategy) hra Loria běžící také na Linuxu je nově k dispozici zdarma (Steam, GOG.com). Vývojový tým se soustředí na RTS hru Liquidation. Její vývoj lze podpořit na Kickstarteru.

Ladislav Hagara | Komentářů: 0
11.6. 09:00 | Nová verze

PeaZip (Wikipedie), tj. multiplatformní správce archivů naprogramovaný ve Free Pascalu v Lazarusu, dospěl do verze 8.0. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 10
11.6. 08:00 | Komunita

Diskusi o očkování proti onemocnění covid-19 se nevyhnul ani odborný diskusní list LKML (Linux Kernel Mailing List). Linus Torvalds očkování doporučuje.

Ladislav Hagara | Komentářů: 148
11.6. 07:00 | Bezpečnostní upozornění

V příspěvku na blogu GitHubu je podrobně rozebrána bezpečností chyba CVE-2021-3560 v toolkitu polkit (Wikipedie) zneužitelná k lokální eskalaci práv. Videoukázka na YouTube. Chyba byla do upstreamu commitnuta před 7 lety a v upstreamu ve verzi 0.119 je již opravena.

Ladislav Hagara | Komentářů: 2
10.6. 20:11 | Nová verze

Byla vydána nová verze 1.57 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.57 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

Ladislav Hagara | Komentářů: 0
10.6. 19:22 | IT novinky

Na konferenci Internet a Technologie 21 s podtitulem mojeID byla představena nová mobilní aplikace MojeID Klíč. Ta má uživatelům služby mojeID ještě více usnadnit přístup ke službám veřejné správy dostupným přes Národní bod pro identifikaci a autentizaci (NIA) a nahrazuje dosavadní aplikaci „mojeID Autentikátor“ používanou od roku 2016. Novinka splňuje veškeré bezpečnostní požadavky a získala akreditaci od Ministerstva vnitra na

… více »
Ladislav Hagara | Komentářů: 0
10.6. 08:00 | Komunita

Do 17. června probíhá GrafanaCONline 2021, tj. online konference uživatelů a vývojářů open source nástroje Grafana (Wikipedie) pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění. V rámci keynote byla představena nová Grafana 8.0.

Ladislav Hagara | Komentářů: 1
9.6. 14:11 | Zajímavý článek

MojeFedora.cz se v článku Flatseal: mějte aplikace pod kontrolou věnuje nástroji Flatseal. Jedná se o grafického správce oprávnění aplikací ve Flatpaku. Instalovat jej lze z Flathubu.

Ladislav Hagara | Komentářů: 7
9.6. 13:44 | Nová verze

Byla vydána nová stabilní verze 4.0 (4.0.2312.24) webového prohlížeče Vivaldi (Wikipedie). Přehled novinek v příspěvku na blogu: automatický překlad stránek pomocí Lingvanex hostovaný na Vivaldi a zatím v beta verzi integrovaný Vivaldi Mail, Calendar a Feed Reader. Nejnovější Vivaldi je postaven na Chromiu 91.0.4472.79.

Ladislav Hagara | Komentářů: 14
Používáte kalkulačku?
 (9%)
 (30%)
 (61%)
 (27%)
 (12%)
Celkem 177 hlasů
 Komentářů: 22, poslední 11.6. 14:37
Rozcestník

Souboj POST VS GET

13.10.2009 17:09 | Přečteno: 3336× | Ostatní | poslední úprava: 13.10.2009 18:10

Dnes jsem sice již jeden zápisek publikoval, ale momentálně stav maximálního vytočení mne nutí sepsat ještě jeden. Možná proto, abych se podělil, zároveň možná i z didaktického hlediska, abych někoho poučil, ale hlavně proto, abych tu sprostě nenadával jen do zdi. A o co se jedná? Jedná se o rozdíl v použití GET nebo POST.

Bohužel jsem se s tím nesetkal poprvé, a vím dokonce i to, že ne naposled. Ale přijde mi už jen z názvů těchto dvou metod logické, k čemu slouží. Prvně POST, z anglického poslat, odeslat, apod. Tedy nějaká data někam odesílám, např. formulář - provádím s databází INSERT, UPDATE nebo DELETE. Naopak GET, z anglického získat, apod. Se snažím nějaká data s databáze vydolovat - provádím SELECT. U toho POSTu to je logicky dokonce ošetřeno i na úrovni prohlížeče, když se snažíte znovu načíst stránku s formulářem, který zpracovává POSTem, tak se Vás prohlížeč slušně optá, zda-li chcete data opravdu odeslat znovu - aby nedošlo k duplicitnímu vložení apod. (prohlížeč nemůže o tom, zda-li vývojář udělal nějaké zabezpečení vkládání duplicit vědět. proto se alespoň optá, zda-li to opravdu chceme udělat - znovu odeslat celý formulář).

Proto nedokáži pochopit, jak někdo, kdo se snaží udělat filtrování výpisu dat z formuláře přes několik selectů, může formulář odeslat POSTem a uložit obsah do SESSION. Pak když si chcete stránku načíst znovu, např. z důvodu, že víte, že v DB jsou již nová data, a chcete je vypsat, tak pokaždé musíte potvrdit OK - ano opravdu chci nastavení filtru odeslat znovu.

Vždy jsem si myslel, že to je jasné - nechci tím ze sebe dělat nějakého extra znalce a z ostatních neznalce, ale vždyť se již chování metod a dokonce i jejich názvy jasně nabízejí k tomu, k čemu jsou určeny. Navíc ještě POSTem odešleme více dat, než jen GETem. POST je v těle požadavku, GET je v hlavičce - ověřte si např. rozšířením Firebug pro FF.

       

Hodnocení: 83 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

finc avatar 13.10.2009 17:31 finc | skóre: 8 | blog: Finc | Kolín
Rozbalit Rozbalit vše Re: Souboj POST VS GET
V podstate souhlas. Problem ovsem muze nastat u nekterych webovych frameworku. Napriklad takove JSF (Java), je komponentovy framework, ktery serializuje viewstate vzdy u klienta a pri novem requestu jej potrebuje pro zregenerovani komponent. Z tohoto duvodu je v JSF kazda druha ptakovina odesilana POSTem. Mam pocit, ze ASP je na tom v nekterych pripadech podobne.

Jinak rozdeleni, co se ma odeslat pomoci GET a co pomoci POST je spise otazkou praxe. Pote jiz nepremyslite, co zvolit, ale vite presne co zvolit :)
Kdo Vam dal pravo ty lidi urazet? A kdo ti dal pravo cumet z okna, ty kr.vo!
Toman avatar 13.10.2009 17:33 Toman | skóre: 29 | blog: Tomanův blog | Kostelec nad Orlicí
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Ano, v zápise to možná bylo pojato až zbytečně obecně, ale konkrétní příklad, který jsem uvedl - filtrování - mi nepřijde jako šťastné, když je odesláno POSTem. Ale jak říkáte - praxe je praxe, pak jdou pravidla stranou, s tím plně souhlasím.
13.10.2009 17:55 CEST
Rozbalit Rozbalit vše Re: Souboj POST VS GET
IMHO je obecne nejlepsi POSTy hned po prevedeni cinnosti presmerovat na novej GET request. Tak potom reload nepacha nic spatnyho. Pak si muze klidne formulare posilat POSTem, kdyz ale nakonec skonci na GETu s tim, ze ty data cte ze session, neni to zadnej problem.

Taky neni obvykle moc hezky, kdyz je URL dlouhy jak svine se spoustou ruznyho bordelu. Tam se pak hodi POST i pro odesilani filtru pro cteni dat z DB.
Toman avatar 13.10.2009 17:59 Toman | skóre: 29 | blog: Tomanův blog | Kostelec nad Orlicí
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Přesně, pokud je někde POST, je nejlepší po zpracování POSTu udělat REDIRECT.
13.10.2009 20:12 rou7
Rozbalit Rozbalit vše Re: Souboj POST VS GET
+1
mkoubik avatar 13.10.2009 20:20 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Taky neni obvykle moc hezky, kdyz je URL dlouhy jak svine se spoustou ruznyho bordelu. Tam se pak hodi POST i pro odesilani filtru pro cteni dat z DB.
Tam samozřejmě nemá POST co dělat a ten "bordel" je v adrese proto, abys mohl někomu poslat odkaz, nebo si ho uložit do záložek a nastavení se uchovalo. Tohle uvažování (dělá to bordel v adrese, tak tam frknu POST) je přesně příklad toho, proti čemu se zápisek ohrazuje.
16.10.2009 12:04 Non_E | skóre: 24 | blog: hic_sunt_leones | Pardubice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Právě u filtrování smysl odesílat data postem. Nejen že si člověk zachová jednoduchou url, ale hlavně zabrání přetečení url v IE (v6?). Uchovávat data o filtraci v GET může být i chyba, pokud nemají všichni návštěvníci přístup ke stejným datům, a budou si adresy posílat.

Optimální řešení, co se pamatuju, je odeslat formulář metodou POST a v odpovědi říct prohlížeči 303 See Other. Vyhnete se tak opakovanému odeslání formuláře, přetečení url a zachováte url hezkou (jestli doteď byla).

Only Sith deals in absolutes.
mkoubik avatar 16.10.2009 14:16 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Ale u filtrování není "opětovné odeslání formuláře" (jestli takhle říkáš opětovnému get požadavku na ?q=neco&sort=neco) vůbec problém, protože nemění stav serveru. Naopak jinak to udělat ani nejde (kromě toho postu, který ale dělá to samé, nebo uložení v session, které je nahovno).
Toman avatar 16.10.2009 14:25 Toman | skóre: 29 | blog: Tomanův blog | Kostelec nad Orlicí
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Proč myslíš, že session je na hovno, když to chceš někde mít uložené po celou dobu sezení - práce se systémem. Jak bys to řešil jinak?
mkoubik avatar 16.10.2009 14:33 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Myslim pro ukládání vyhledávaného výrazu a filtrační options. Pokud požadavek nemění stav serveru, tak by měl vrátit pokaždé stejnou stránku (pokud se nezmění data na serveru apod.). Koukni se na google.com/search - víš prd, co jsem hledal (pokud by to bylo v session).
Toman avatar 16.10.2009 15:15 Toman | skóre: 29 | blog: Tomanův blog | Kostelec nad Orlicí
Rozbalit Rozbalit vše Re: Souboj POST VS GET
No, to máš pravdu - ale já měl na mysli, třeba: máš několik výrobků, a chceš vypsat pouze o jednoho výrobce, takže si ho vybereš v selectu, a odešleš tlačítkem, to se odešle GETem a uloží do SESSION - tím se vlastně vždy při návratu na danou stránku nastaví filtr tak, jak byl nastaven naposledy - než vyprší SESSION.
18.10.2009 10:27 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Pak si otevřete druhou záložku pro jiného výrobce, vrátíte se na první a kliknete na odkaz „další“, a očekáváte dalších 10 výrobků od prvního výrobce – a mezitím vám tam naskočí dalších 10 výrobků od druhého výrobce, protože druhá záložka přepsala údaje v session.
18.10.2009 10:50 Non_E | skóre: 24 | blog: hic_sunt_leones | Pardubice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
To je vada na kráse, předávat všechny informace v url také nejde. Řešením by mohlo být předání session ID, to se mi ale vůbec nelíbí.

Podobná situace ale nastane například i tehdy, když se někdo v druhém tabu pokusí přihlásit pod jiným účtem.
Only Sith deals in absolutes.
18.10.2009 13:37 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Proč by to nešlo předávat v URL? Pokud jsem na seznamu výrobků od jednoho výrobce, je přirozené, že ta stránka bude mít adresu /vyrobci/vyrobce-X. Zkuste na chvíli zapomenout na databáze a dynamické generování stránek a představit si, že web generujete jednorázově do statických stránek – myslím, že hned budete vědět, jak by vypadala jednotlivá URL.
18.10.2009 14:07 Non_E | skóre: 24 | blog: hic_sunt_leones | Pardubice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Proti předávání parametrů v url jsem v tomto konkrétním případě proto, že těch parametrů může být pěkná spousta. Setkal jsem se s tím, že původní návrh se udělal podobnějak píšete /vyrobci/vyrobce-X. Časem přibývali dodavatelé (a další možnosti hledání) a nakonec vše skončilo u IE tím, že URl byla delší než 2083 znaků.
Only Sith deals in absolutes.
18.10.2009 14:23 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Pan nezbývá než v UR nechat jen ty podstatné parametry a zbytek uložit do session, přičemž ale sessionID bude v URL.
18.10.2009 14:50 Non_E | skóre: 24 | blog: hic_sunt_leones | Pardubice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Ve výsledku stejně nemůže zákazník poslat URL kolegovi/kamarádovi, protože by mu dal své session ID. To ale neví a klidně to udělá; tím okamžikem máme horší problém, objednávky chodí špatné osobě atd. V nejlepším případě vynechá své sessionID a druhá strana dostane možná podobný výsledek, ale možná úplně jiný.

Na záložky (bookmarks, oblíbené…) také nemůže spoléhat, protože o session může přes víkend přijít (navíc pravidelná změna sessionID zvyšuje bezpečnost).
Only Sith deals in absolutes.
Toman avatar 18.10.2009 15:19 Toman | skóre: 29 | blog: Tomanův blog | Kostelec nad Orlicí
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Tak jak efektivně řešit? :-)
18.10.2009 15:38 Non_E | skóre: 24 | blog: hic_sunt_leones | Pardubice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Vyber si jedno nebo druhé řešení a smiř se s omezeními.
Only Sith deals in absolutes.
18.10.2009 15:49 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Souboj POST VS GET
SessionID s údaji o přihlášeném uživateli nemusí být shodné se sessionID s údaji o aktivním filtru. Jak jsem psal, podstatné parametry by měly být v URL, takže by druhá strana neměla dostat podstatně odlišný výsledek. Pokud vás opravdu trápí délka URL, nemusíte tam dávat popisné názvy, stačí jen kódy – a pak můžete do URL schovat celkem hodně.
16.10.2009 14:53 Non_E | skóre: 24 | blog: hic_sunt_leones | Pardubice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Data poslaná metodou POST se samozřejmě zpracují a uloží do session. Proč? Například když mám katalog zboží (e-shop), tak si nechci přeci pokaždé klikat na formulář, aby se produkty řadily v kategorii podle ceny. Nebudu ani ke každému odkazu připisovat parametry, které by se na odkazované stránce mohly hodit.
Only Sith deals in absolutes.
mkoubik avatar 13.10.2009 20:23 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Jinak s prvním odstavcem samozřejmě souhlas.
13.10.2009 23:06 Kvakor
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Pokud si to ještě pamatuju z RFC, tak zatímco u GET se předpokládá, že se pro každé jednotlivé URL stav nebude měnit (a tudíž se může cachovat), u POSTu se naopak počítá, že se stav měnit bude a tudiž se cachovat nesmí. U GETu se navíc ještě předpokládá že je idempotentní, tj. že jeho opakované použití by mělo vrátit stejný výsledek nezávisle na tom, kolikrát proběhlo opakování.

V praxi se bohužel na uvedené zásady kašle :-(
xxx avatar 13.10.2009 23:32 xxx | skóre: 42 | blog: Na Kafíčko
Rozbalit Rozbalit vše Re: Souboj POST VS GET

Ja myslim, ze ten problem je, ze jaksi tvurci HTTP nepredpokladali, ze lidi do nej budou chtit balit vsechna ta hejblatka, blikatka a jine interaktvni kokotiny co se dnes na webu objevuji.

BTW: jak je myslena ta idempotence. To jako, ze si treba muzu vybrat zobrazit data za poslednich 5/10/15 minut. Je to idmepotentni, protoze furt dostanu data za stejny casovy interval, nebo to neni idempotentni, protoze ty data samotna jsou jina? Pokud to je druha moznost, tak si nedokazu predstavit jaka data by to mohla splnovat.

Please rise for the Futurama theme song.
14.10.2009 00:22 Kvakor
Rozbalit Rozbalit vše Re: Souboj POST VS GET
K té idempotenci - pokud si to dobře pamatuju, jde hlavně o to, že u GETu by nemělo vadit, jestli najednou dorazil jeden nebo třeba pět GET požadavků, vrácená data by měla být stejná. Např. pokud uživatel ztratí trpělivost a několikrát máčkne na Reload, měl by dostat stejná data, jako kdyby na Reload nemačkal a vyčkal času jako husa klasu.

Jinak řečeno, nejde o to, jak se data mění během času (to má na starosti cachování a nastavování platnosti stránky), ale jestli záleží na počtu volání požadavků při vrácení výsledku.
14.10.2009 11:28 loketnik
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Naprosty souhlas. Nekteri radoby vyvojari obcas vymysleji absolutni harakiri a hlavne uplne zbytecne v tomto pripade.
Luboš Doležel (Doli) avatar 14.10.2009 14:23 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Souboj POST VS GET
V tomhle jsou úžasné weby dělané v ASP.NET, kde vývojář všude nacpe javascript:__doPostBack()...
14.10.2009 15:36 miho | skóre: 23 | blog: Mihovy_sochory | Orlová
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Nikoliv, vývojář nic takového nedělá a často ani neví, jak to uvnitř funguje. To vygeneruje .net sám za běhu. Vývojář jen z toolbaru přetáhne nejakou komponentu do webové stránky, případně u ní nastaví vlastnost autoPostBack, dvakrat na ní klikne, otevře se mu editor s připravenou kostrou metody, ktera danou událost obslouží ;-)

mkoubik avatar 15.10.2009 23:04 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Tohle je obecně bolest komponentových frameworků, ať už je to .NET, JSF, nebo PHP4Applications. Prostě pokoušet se naroubovat postupy z tvorby GUI aplikací na bezstavový HTTP je jeden z hlubokých přešlapů lidstva, na který, když ne my, tak příští generace určitě krvavě doplatí.
15.10.2009 23:18 dark
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Ale ty aplikace se pak tvoří rychleji. Já osobně si v js dokážu napsat cokoliv, ale nedivím se lidem, co v js psát nechcou a raději použijou komponentní frameworky, např asp.net nebo wicket.
mkoubik avatar 16.10.2009 14:29 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Věř mi, že existují nekomponentové frameworky, ve kterých se tvoří aplikace rychleji. Např v Nette nejsou klasické postbackové komponenty (jak říká DG "pravoúhlé oblasti stránky"), ale pouze autonomní čási aplikace, které si uchovávají stav aplikace na serveru a ne v hidden polích a dají se (různými způsoby) vypsat (i vícekrát) na stránku.

Při kliknutí na odkaz (s vypnutým javascriptem - tzn href=) ti vrátí stránku s aktuálním stavem všech komponent, pokud máš zapnutý ajax a povolený javascript (tzn. onclick), tak se vrátí json objekt s obsahem změněných komponent a ty se překreslí javascriptem. Ajax nikdy nebyl jednodušší (v podstatě $presenter->isAjax=true;) a přístupnější (Žádný prasárny typu <a href="javascript:..." nebo <a href="#" onclick="..."). Pokud máš vypnutý javascript, nebo klikneš prostředním tlačítkem ve firefoxu, tak se ti otevře stejná stránka jako by byl výsledek ajaxu, akorát s refreshem.

Změny stavu se provádí jednoduchým getem, ve kterém je jenom změnění proměnná (následně refresh), nebo pomocí post-redirect-get (podle účelu), vybrané proměnné si můžeš vytáhnout do url.
18.10.2009 12:06 dark
Rozbalit Rozbalit vše Re: Souboj POST VS GET
Tak funguje ale hodně frameworků, v prvé řadě jde o to, kdo s tím dělá, a jaké má znalosti. Já osobně PHP nepoužívám, a doufám, že už nikdy nebudu muset;-)

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.