HTTP POST požaduje dodanie ďalších údajov z klienta (prehľadávača) na server v tele správy. Na rozdiel od toho, GET žiadosti obsahujú všetky požadované údaje v adrese URL. Formuláre v HTML môžu použiť ktorúkoľvek z uvedených metód method = "POST" alebo metóda = "GET" (predvolené) v prvok. Zadaná metóda určuje, ako sa údaje formulára odosielajú na server. Ak je metódou GET, všetky údaje formulára sa zakódujú do adresy URL pripojenej k akčné URL ako parametre reťazca dopytu. Pri POST sa údaje formulára zobrazia v tele správy žiadosti HTTP.
GET | POST | |
---|---|---|
histórie | Parametre zostávajú v histórii prehliadača, pretože sú súčasťou adresy URL | Parametre sa neuložia do histórie prehliadača. |
záložkou | Môže byť označený záložkou. | Nemožno uložiť medzi záložky. |
Tlačidlo SPÄŤ / opakované odoslanie | Žiadosti GET sa znova vykonávajú, ale nemusia sa znova odosielať na server, ak je HTML uložené v pamäti prehliadača. | Prehliadač zvyčajne upozorňuje používateľa, že bude potrebné údaje znova odoslať. |
Typ kódovania (atribút enctype) | aplikácie / x-www-form-urlencoded | multipart / form-data alebo application / x-www-form-urlencoded Použite multipartové kódovanie pre binárne dáta. |
parametre | ale údaje parametrov sú obmedzené na to, čo môžeme vložiť do riadku žiadosti (URL). Niektoré servery, ktoré sú najbezpečnejšie na použitie menej ako 2 kB parametrov, zvládnu až 64 kB | Môže odosielať parametre vrátane nahrávania súborov na server. |
Hacked | Ľahšie sa hackne na skripty | Ťažšie sa hacknúť |
Obmedzenia typu údajov formulára | Áno, povolené sú iba znaky ASCII. | Žiadne obmedzenia. Binárne údaje sú tiež povolené. |
zabezpečenia | GET je v porovnaní s POST menej bezpečný, pretože odoslané údaje sú súčasťou adresy URL. Je teda uložená v histórii prehliadača a protokoloch servera v obyčajnom texte. | POST je o niečo bezpečnejšie ako GET, pretože parametre sa neukladajú v histórii prehliadača ani v protokoloch webového servera. |
Obmedzenia týkajúce sa dĺžky údajov formulára | Áno, pretože údaje formulára sú v adrese URL a dĺžka adresy URL je obmedzená. Dĺžka bezpečnej adresy URL je často 2 048 znakov, ale líši sa podľa prehliadača a webového servera. | Žiadne obmedzenia |
Použiteľnosť | Pri odosielaní hesiel alebo iných citlivých informácií by sa metóda GET nemala používať. | Metóda POST použitá pri odosielaní hesiel alebo iných citlivých informácií. |
viditeľnosť | Metóda GET je viditeľná pre všetkých (bude sa zobrazovať v paneli s adresou prehliadača) a obmedzuje množstvo informácií, ktoré sa majú odoslať. | Premenné metódy POST sa v adrese URL nezobrazujú. |
medzipamäte | Môže byť v pamäti | Nie je v pamäti |
Základný rozdiel medzi Method = "GET" a METHOD = "POST" je to, že zodpovedajú rôzne HTTP požiadavky, ako je definované v špecifikáciách HTTP. Proces predkladania pre obe metódy začína rovnakým spôsobom - súbor údajov formulára je skonštruovaný prehliadačom a potom kódovaný spôsobom určeným enctype atribút. pre METHOD = "POST enctype atribút môže byť multipart / form-dát alebo aplikácie / x-www-form-urlencoded, zatiaľ čo pre Method = "GET", iba aplikácie / x-www-form-urlencoded je dovolené. Tento súbor dát formulára sa potom prenesie na server.
Pre odoslanie formulára s METHOD = "GET" prehliadač vytvorí URL tak, že vezme hodnotu akčné atribút, pripájajúci a ? k nemu, potom sa pripojí sada dát formulára (kódovaná pomocou typu obsahu application / x-www-form-urlencoded). Prehliadač potom spracuje túto adresu URL tak, akoby nasledoval odkaz (alebo akoby používateľ zadal adresu URL priamo). Prehliadač rozdelí adresu URL na časti a rozpozná hostiteľa, potom pošle tomuto hostiteľovi požiadavku GET so zvyškom adresy URL ako argument. Server to odtiaľ vezme. Tento proces znamená, že údaje formulára sú obmedzené na kódy ASCII. Osobitná pozornosť by sa mala venovať kódovaniu a dekódovaniu iných typov znakov pri ich prechode cez URL vo formáte ASCII.
Odoslanie formulára s METHOD = "POST" spôsobí odoslanie POST žiadosti s použitím hodnoty akčné Atribút a správa vytvorená podľa typu obsahu špecifikovaného v enctype atribút.
Keďže údaje formulára sa odosielajú ako súčasť adresy URL, keď GET sa používa --
Spracovanie údajov odoslaného formulára v zásade závisí od toho, či sa odošlú Method = "GET" alebo METHOD = "POST". Pretože dáta sú kódované rôznymi spôsobmi, sú potrebné rôzne dekódovacie mechanizmy. Vo všeobecnosti teda zmena METÓDY môže vyžadovať zmenu v skripte, ktorý spracováva predloženie. Napríklad, keď používate rozhranie CGI, skript prijíma dáta v premennej prostredia (QUERYSTRING), keď GET sa používa. Ale keď POST sa použije, údaje formulára sa odovzdajú v štandardnom vstupnom toku (stdin) a počet bajtov, ktoré sa majú prečítať, je uvedený v záhlaví Content-length.
GET sa odporúča pri predkladaní „idempotentných“ formulárov - tých, ktoré „významne nemenia stav sveta“. Inými slovami, formuláre, ktoré zahŕňajú iba databázové dotazy. Ďalšou perspektívou je, že niekoľko idempotentných dopytov bude mať rovnaký účinok ako jeden dotaz. Ak ide o aktualizácie databázy alebo iné akcie, napríklad o spustenie e-mailov, odporúča sa použitie testu POST.
Z blogu vývojára Dropboxu:
prehliadač presne nevie, čo konkrétny formulár HTML robí, ale ak je formulár odoslaný prostredníctvom protokolu HTTP GET, prehliadač vie, že je bezpečné automaticky opakovať odoslanie v prípade chyby siete. V prípade formulárov, ktoré používajú HTTP POST, nemusí byť bezpečné opakovať pokus, takže prehliadač najprv požiada používateľa o potvrdenie.
Požiadavka „GET“ je často na vyrovnávacej pamäti, zatiaľ čo požiadavka „POST“ môže byť sotva splnená. Pre systémy dotazov to môže mať značný vplyv na účinnosť, najmä ak sú reťazce dotazov jednoduché, pretože cache môžu slúžiť najčastejšie dotazy.
V niektorých prípadoch použitie POST sa odporúča aj pre idempotentné dotazy:
Aktualizované 15. mája 2015: Konkrétne pri použití protokolu HTTPS (HTTP cez TLS / SSL) ponúka POST vyššiu bezpečnosť ako GET?
Toto je zaujímavá otázka. Povedzme, že ste na webovú stránku odoslali žiadosť:
ZÍSKAJTE https://www.example.com/login.php?user=mickey&passwd=mini
Aké informácie o tejto žiadosti budú k dispozícii snooperovi za predpokladu, že sa monitoruje vaše internetové pripojenie? Ak sa namiesto toho použije POST a údaje používateľa a passwd sú zahrnuté do premenných POST, bude to v prípade pripojenia HTTPS bezpečnejšie.?
Odpoveď znie nie. Ak podáte takúto požiadavku GET, útočník bude sledovať iba nasledujúce informácie, ktoré sledujú váš webový prenos:
Časť cesty URL - t. J. Skutočná požadovaná stránka, ako aj parametre reťazca dotazov - sú chránené (šifrované), zatiaľ čo počas ich cesty na cieľový server sú prenášané cez kábel. Situácia je rovnaká pre žiadosti o POST.
Webové servery majú samozrejme tendenciu logovať celú URL vo formáte obyčajného textu do svojich prístupových protokolov; zasielanie citlivých informácií cez GET preto nie je dobrý nápad. To platí bez ohľadu na to, či sa používa HTTP alebo HTTPS.