abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Nová verze

    Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 140 (pdf) a HackSpace 77 (pdf).

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    včera 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 1
    včera 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 7
    včera 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    17.4. 17:55 | IT novinky

    Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.

    Ladislav Hagara | Komentářů: 3
    17.4. 17:44 | IT novinky

    Společnost Boston Dynamics oznámila, že humanoidní hydraulický robot HD Atlas šel do důchodu (YouTube). Nastupuje nová vylepšená elektrická varianta (YouTube).

    Ladislav Hagara | Komentářů: 1
    KDE Plasma 6
     (68%)
     (10%)
     (2%)
     (19%)
    Celkem 556 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Souboj POST VS GET

    13.10.2009 17:09 | Přečteno: 3424× | 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: 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

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