Portál AbcLinuxu, 8. května 2024 18:13


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového 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
Odpovědět | Sbalit | Link | Blokovat | Admin
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
Odpovědět | Sbalit | Link | Blokovat | Admin
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
Odpovědět | Sbalit | Link | Blokovat | Admin
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
Odpovědět | Sbalit | Link | Blokovat | Admin
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: 24 | 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

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.