Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 13672|Odpoveď: 1

[HTML/HTML5] Rozdiel medzi GET a POST spočíva v akcii odoslania formulára

[Kopírovať odkaz]
Zverejnené 6. 12. 2014 10:54:55 | | |
HTTP definuje rôzne spôsoby interakcie so serverom a existujú 4 základné metódy, a to GET, POST, PUT a DELETE. Plný názov URL je deskriptor zdroja, môžeme si ho predstaviť takto: URL adresa, používa sa na opis zdroja v sieti a GET, POST, PUT, DELETE v HTTP zodpovedá štyrom operáciám kontroly, úpravy, pridávania a odstraňovania tohto zdroja. V tomto bode by ste mali mať všeobecné pochopenie, že GET sa zvyčajne používa na získavanie/dotazovanie informácií o zdrojoch, zatiaľ čo POST sa zvyčajne používa na aktualizáciu informácií o zdrojoch.

1. Podľa špecifikácie HTTP sa GET používa na vyhľadávanie informácií a mal by byť bezpečný a idempotentný.

(1). Takzvaná bezpečnosť znamená, že operácia sa používa na získavanie informácií, nie na ich úpravu. Inými slovami, požiadavky na GET by vo všeobecnosti nemali mať vedľajšie účinky. To znamená, že získava iba informácie o zdroji, podobne ako databázový dotaz, a nebude upravovať, pridávať dáta ani ovplyvňovať stav zdroja.

* Poznámka: Význam bezpečnosti sa tu vzťahuje len na nemodifikované informácie.

(2). idempotentný znamená, že viaceré požiadavky na tú istú URL by mali vrátiť rovnaký výsledok.

V praktickej aplikácii však vyššie uvedené dve predpisy nie sú také prísne. Príklady citovania článkov iných ľudí: Napríklad titulná stránka spravodajského webu sa neustále aktualizuje. Hoci druhá požiadavka vracia inú várku správ, operácia je stále považovaná za bezpečnú a idempotentnú, pretože vždy vracia aktuálne správy. V zásade, ak je cieľom, že keď používateľ otvorí odkaz, môže si byť istý, že zdroj nebol z jeho pohľadu zmenený.

2. Podľa špecifikácie HTTP POST predstavuje požiadavku, ktorá môže upraviť zdroj na serveri. Pokračujúc v citovaní vyššie uvedeného príkladu: Still news Ako príklad vezmime webovú stránku, čitatelia by mali pridávať vlastné komentáre k správam, pretože zdroje stránky sa po odoslaní komentára alebo úprave zdrojov zmenia.



Vyššie uvedené približne rozoberá niektoré princípy GET a POST v špecifikácii HTTP. Mnoho ľudí však pri samotnom vykonávaní nedodržiava špecifikáciu HTTP, čo môže viesť k mnohým príčinám tohto problému, ako napríklad:

1. Mnohí ľudia používajú GET na aktualizáciu zdrojov, pretože potrebujú ísť do FORM, aby mohli použiť POST, čo môže byť trochu komplikované.

2. Operácia pridávania, mazania, úpravy a kontroly zdrojov sa dá skutočne dokončiť cez GET/POST bez potreby používať PUT a DELETE.

3. Ďalším je, že skorí dizajnéri webových MVC rámcov vedome nevnímali a nenavrhovali URL ako abstraktné zdroje, takže vážnym problémom je, že tradičný webový MVC framework v podstate podporuje len dve HTTP metódy, GET a POST, ale nepodporuje metódy PUT a DELETE.

* Krátke vysvetlenie MVC: MVC pôvodne existovalo v programe Desktop, M označuje dátový model, V používateľské rozhranie a C kontrolér. Účelom použitia MVC je oddeliť implementačný kód M a V, aby ten istý program mohol používať rôzne reprezentácie.

Vyššie uvedené 3 body zvyčajne popisujú starý štýl (bez prísneho dodržiavania špecifikácie HTTP), s vývojom architektúry je teraz REST (Representational State Transfer), nový štýl podporujúci špecifikáciu HTTP.



Po rozprávaní o hlavnom probléme sa pozrime na rozdiel medzi GET a POST z povrchového javu:

1. Dáta GET požiadavky budú pripojené k URL (t. j. dáta sú umiestnené v HTTP protokolovej hlavičke) a ? Rozdelte URL a preneste dáta, pričom parametre sú prepojené pomocou &, napríklad: login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD. Ak sú údaje anglické písmená/čísla, pošlite ich tak, ako sú, ak je to medzera, preveďte ich na +, ak sú to čínske/iné znaky, potom priamo zašifrujte reťazec pomocou BASE64, aby ste získali vzorku napríklad: %E4%BD%A0%E5%A5%BD, kde XX v %XX je ASCII reprezentované symbolom v hexadecimálnom formáte.

POST umiestni odoslané dáta do tela paketu HTTP paketu.

2. "Maximálne dáta odosielané metódou GET môže byť len 1024 bajtov, teoreticky neexistuje limit na POST a veľké množstvo dát môže byť prenesené, až do 80KB v IIS4 a 100KB v IIS5"??!

Vyššie uvedená veta je presmerovaná z iných článkov, v skutočnosti je nesprávne a nepresné tvrdiť toto:

(1). Po prvé, "údaje odosielané metódou GET môžu mať maximálne 1024 bajtov", pretože GET odosiela dáta cez URL, takže množstvo údajov, ktoré môže GET odoslať, priamo súvisí s dĺžkou URL. V skutočnosti neexistuje horný limit parametrov pre URL a špecifikácia HTTP protokolu neobmedzuje dĺžku URL. Toto obmedzenie je obmedzenie stanovené konkrétnym prehliadačom a serverom. IE má limit dĺžky URL 2083 bajtov (2K+35). Pre iné prehliadače ako Netscape, FireFox a podobne neexistuje teoretický limit dĺžky a jeho limit závisí od podpory operačného systému.

Všimnite si, že to obmedzuje celú dĺžku URL, nielen dĺžku dát parametra. [Pozri ref. 5]

(2). Teoreticky POST nemá limit veľkosti a špecifikácia protokolu HTTP nemá limit veľkosti, a nie je presné tvrdiť, že "existuje limit veľkosti 80K/100K pre POST dáta", neexistuje žiadny limit pre POST dáta, a obmedzujúcu úlohu zohráva výpočtový výkon handlera servera.

Pre programy ASP má objekt Request limit dĺžky dát 100K pri spracovaní každého poľa formulára. Ale s Request.BinaryRead takéto obmedzenie neexistuje.

Na základe toho Microsoft pre IIS 6.0 zvýšil obmedzenia z bezpečnostných dôvodov. Musíme tiež venovať pozornosť:

1). IIS 6.0 štandardne poskytuje maximálne 200 KB ASP POST dát a limit je 100 KB na pole formulára.
2). Predvolená veľkosť uploadových súborov v IIS 6.0 je 4MB.
3). IIS 6.0 predvolene nastavuje maximálnu hlavičku požiadaviek 16KB.
Tieto obmedzenia neboli dostupné pred IIS 6.0. [Pozri ref. 5]

Takže vyššie uvedené 80K a 100K môžu byť len predvolené hodnoty (poznámka: parametre IIS4 a IIS5 som ešte nepotvrdil), ale určite si ich môžete nastaviť sami. Keďže predvolené hodnoty týchto parametrov sú v každej verzii IIS odlišné, podrobnosti nájdete v príslušnom konfiguračnom dokumente IIS.

3. V ASP server používa Request.QueryString na získanie parametra GET request a Request.Form na získanie parametra POST request. V JSP použite request.getParameter(\"XXXX\") na jeho získanie, hoci existuje aj metóda request.getQueryString() v jsp, ale je zložitejšia na použitie, napríklad: pošlite test.jsp?name=hyddd&password=hyddd a použite request.getQueryString() na získanie :name= hyddd&password=hyddd。 V PHP môžete použiť _GET a _POST $ na získanie dát z GET a POST, zatiaľ čo $_REQUEST môže získať dáta z oboch požiadaviek GET a POST. Stojí za zmienku, že používanie request v JSP a $_REQUEST v PHP prináša skryté riziká, čo bude zhrnuté v článku nabudúce.

4.POST je bezpečnejšie ako GET. Poznámka: Bezpečnosť spomenutá tu nie je rovnaký koncept ako "bezpečnosť" uvedená v GET vyššie. Napríklad, ak odošlete údaje cez GET, vaše používateľské meno a heslo sa zobrazia v čistom texte na URL, pretože (1) prihlasovacia stránka môže byť prehliadačom uložená do vyrovnávacej pamäte, (2) ostatní si prezerajú históriu prehliadača, takže ostatní môžu získať váš účet a heslo Útok falšovaním.

Zhrnuté, Get je požiadavka na požiadanie o dáta zo servera, zatiaľ čo Post je požiadavka na odoslanie dát serveru, vo FORM je Method predvolene nastavená na "GET", v podstate sú GET a POST len odlišné mechanizmy odosielania, nie jeden prijíma a odosiela jeden z nich!





Predchádzajúci:Rýchlo extrahujte obrázok emotikonu QQ eif
Budúci:Počítačová asociácia najala technikov H3C H3C, aby školili členov asociácie o sieti
Zverejnené 7. 12. 2014 17:24:18 |
Čítať a prispievať späť je cnosť
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com