GET vs. POST

HTTP POŠTA žádosti o dodání dalších dat z klienta (prohlížeče) na server v těle zprávy. V porovnání, DOSTAT žádosti obsahují všechna požadovaná data v adrese URL. Formuláře v HTML mohou použít kteroukoli metodu zadáním method = "POST" nebo method = "GET" (výchozí) v živel. Zadaná metoda určuje, jak jsou data formuláře odesílána na server. Když je metoda GET, všechna data formuláře jsou zakódována do adresy URL připojené k akce URL jako parametry řetězce dotazu. U POST se data formuláře objeví v těle zprávy požadavku HTTP.

Srovnávací tabulka

GET versus POST srovnávací tabulka
DOSTATPOŠTA
Dějiny Parametry zůstávají v historii prohlížeče, protože jsou součástí adresy URL Parametry nejsou uloženy v historii prohlížeče.
Záložka Lze označit záložkou. Nelze uložit do záložek.
Tlačítko BACK / znovu odeslat chování Požadavky GET jsou znovu provedeny, ale nemusí být znovu odeslány na server, pokud je HTML uloženo v mezipaměti prohlížeče. Prohlížeč obvykle upozorní uživatele, že bude nutné údaje znovu odeslat.
Typ kódování (atribut enctype) application / x-www-form-urlencoded multipart / form-data nebo application / x-www-form-urlencoded Použijte multipartové kódování pro binární data.
Parametry lze poslat, ale data parametrů jsou omezena na to, co můžeme vložit do řádku požadavku (URL). Nejbezpečnější použití méně než 2 kB parametrů, některé servery zpracovávají až 64 kB Může odesílat parametry, včetně nahrávání souborů, na server.
Napadl Snadnější hackování pro děti ve skriptech Těžší hacknout
Omezení typu dat formuláře Ano, povoleny jsou pouze znaky ASCII. Bez omezení. Binární data jsou také povolena.
Bezpečnostní GET je méně bezpečný ve srovnání s POST, protože odesílaná data jsou součástí adresy URL. Je tedy uložen v historii prohlížeče a serverových protokolech v prostém textu. POST je o něco bezpečnější než GET, protože parametry nejsou uloženy v historii prohlížeče nebo v protokolech webového serveru.
Omezení délky dat formuláře Ano, protože data formuláře jsou v adrese URL a délka adresy URL je omezená. Maximální délka bezpečné adresy URL je obvykle 2048 znaků, ale liší se podle prohlížeče a webového serveru. Bez omezení
Použitelnost Metoda GET by se neměla používat při odesílání hesel nebo jiných citlivých informací. Metoda POST použitá při odesílání hesel nebo jiných citlivých informací.
Viditelnost Metoda GET je viditelná pro všechny (bude zobrazena v adresním řádku prohlížeče) a má omezené množství informací, které mají být odeslány. Proměnné metody POST se v URL nezobrazují.
V mezipaměti Lze uložit do mezipaměti Není v mezipaměti

Obsah: GET vs. POST

  • 1 Rozdíly v předkládání formulářů
    • 1.1 Klady a zápory
  • 2 Rozdíly ve zpracování na straně serveru
  • 3 Doporučené použití
  • 4 A co HTTPS?
  • 5 Reference

Rozdíly v předkládání formulářů

Základní rozdíl mezi METHOD = "GET" a METHOD = "POST" je to, že odpovídají různé požadavky HTTP, jak je definováno ve specifikacích HTTP. Proces odesílání pro obě metody začíná stejným způsobem - datový soubor formuláře je vytvořen prohlížečem a poté kódován způsobem určeným enctype atribut. Pro METODA = "POST enctype atribut může být multipart / form-data nebo application / x-www-form-urlencoded, zatímco pro METHOD = "GET", pouze application / x-www-form-urlencoded je povoleno. Tato sada dat formuláře je poté přenesena na server.

Pro odeslání formuláře s METHOD = "GET" prohlížeč vytvoří URL tak, že vezme hodnotu akce atribut, připojení a ? k němu, pak připojte sadu dat formuláře (kódovaná pomocí typu obsahu aplikace / x-www-form-urlencoded). Prohlížeč potom tuto adresu URL zpracuje, jako by sledoval odkaz (nebo jako kdyby uživatel zadal adresu URL přímo). Prohlížeč rozdělí adresu URL na části a rozpozná hostitele, poté odešle tomuto hostiteli požadavek GET se zbytkem adresy URL jako argument. Server to odtamtud vezme. Tento proces znamená, že data formuláře jsou omezena na kódy ASCII. Zvláštní pozornost je třeba věnovat kódování a dekódování jiných typů znaků při jejich předávání prostřednictvím adresy URL ve formátu ASCII.

Odeslání formuláře s METHOD = "POST" způsobí odeslání POST požadavku s využitím hodnoty akce Atribut a zpráva vytvořená podle typu obsahu určeného v enctype atribut.

Výhody a nevýhody

Protože data formuláře jsou odesílána jako součást adresy URL, když DOSTAT se používá --

  • Data formuláře jsou omezena na kódy ASCII. Zvláštní pozornost je třeba věnovat kódování a dekódování jiných typů znaků při jejich předávání prostřednictvím adresy URL ve formátu ASCII. Na druhou stranu lze prostřednictvím binárních dat, obrázků a dalších souborů odesílat METHOD = "POST"
  • Všechna vyplněná data formuláře jsou viditelná v URL. Navíc je také uložena v historii / protokolech webového prohlížení uživatele pro prohlížeč. Tyto problémy dělají DOSTAT méně bezpečné.
  • Jednou z výhod dat formuláře odesílaných jako součást adresy URL je však to, že si můžete adresy URL uložit do záložek a přímo je použít a zcela obejít proces vyplňování formuláře.
  • Je omezeno, kolik dat formuláře lze odeslat, protože délky URL jsou omezené.
  • Script kiddies mohou snadněji odhalit zranitelnosti v systému, které jej napadnou. Například Citibank byla napadena změnou čísel účtů v řetězci URL.[1] Zkušení hackeři nebo weboví vývojáři samozřejmě mohou takové zranitelnosti odhalit, i když je použit POST; je to jen trochu těžší. Obecně musí být server podezřelý z veškerých dat odeslaných klientem a chránit před nezabezpečenými přímými odkazy na objekt.

Rozdíly ve zpracování na straně serveru

Zpracování údajů z odeslaného formuláře v zásadě závisí na tom, zda jsou zaslána METHOD = "GET" nebo METHOD = "POST". Protože data jsou kódována různými způsoby, jsou zapotřebí různé dekódovací mechanismy. Obecně řečeno, změna METODY může vyžadovat změnu skriptu, který zpracovává podání. Například při použití rozhraní CGI skript přijímá data v proměnné prostředí (QUERYSTRING), když DOSTAT se používá. Ale když POŠTA je použito, data formuláře jsou předávána ve standardním vstupním toku (stdin) a počet bajtů, které mají být přečteny, je dán záhlavím Content-length.

Doporučené použití

GET se doporučuje při předkládání „idempotentních“ formulářů - těch, které „významně nemění stav světa“. Jinými slovy, formuláře, které zahrnují pouze databázové dotazy. Další perspektiva je, že několik idempotentních dotazů bude mít stejný účinek jako jediný dotaz. Pokud se jedná o aktualizace databáze nebo jiné akce, jako je spouštění e-mailů, doporučuje se použít POST.

Z blogu vývojáře Dropboxu:

prohlížeč přesně neví, co konkrétní formulář HTML dělá, ale pokud je formulář odeslán pomocí protokolu HTTP GET, prohlížeč ví, že je bezpečné automaticky opakovat odeslání, pokud dojde k chybě sítě. U formulářů, které používají HTTP POST, nemusí být bezpečné opakovat pokus, takže prohlížeč nejprve požádá uživatele o potvrzení.

Požadavek „GET“ je často vyrovnatelný, zatímco požadavek „POST“ může být jen stěží. U systémů dotazů to může mít značný dopad na účinnost, zejména pokud jsou řetězce dotazů jednoduché, protože mezipaměti mohou sloužit nejčastějším dotazům.

V některých případech použití POŠTA se doporučuje i pro idempotentní dotazy:

  • Pokud by data formuláře obsahovala jiné znaky než ASCII (například znaky s diakritikou) METHOD = "GET" je v zásadě nepoužitelný, ačkoli to může fungovat v praxi (hlavně pro znaky ISO Latin 1).
  • Pokud je soubor dat formuláře velký - řekněme, stovky znaků - pak METHOD = "GET" může způsobit praktické problémy s implementacemi, které nedokáží zpracovat takové dlouhé adresy URL.
  • Možná se budete chtít vyhnout METHOD = "GET" aby bylo uživatelům méně viditelné, jak formulář funguje, zejména proto, aby byla skrytá pole (INPUT TYPE = "HIDDEN") skryta tím, že se neobjeví v URL. Ale i když používáte skrytá pole s METHOD = "POST", budou se stále zobrazovat ve zdrojovém kódu HTML.

A co HTTPS?

Aktualizováno 15. května 2015: Konkrétně při použití protokolu HTTPS (HTTP přes TLS / SSL) nabízí POST větší zabezpečení než GET?

To je zajímavá otázka. Řekněme, že na webovou stránku zadáte požadavek:

 ZÍSKEJTE https://www.example.com/login.php?user=mickey&passwd=mini 

Za předpokladu, že vaše internetové připojení je monitorováno, jaké informace o tomto požadavku budou k dispozici snooperovi? Pokud se místo toho použije POST a data uživatele a passwd jsou zahrnuta do proměnných POST, bude to v případě připojení HTTPS bezpečnější.?

Odpověď je ne. Pokud takový požadavek získáte, budou útočníkovi, který sleduje váš webový provoz, znát pouze následující informace:

  1. Skutečnost, že jste vytvořili připojení HTTPS
  2. Název hostitele - www.example.com
  3. Celková délka žádosti
  4. Délka odpovědi

Část cesty URL - tj. Skutečná požadovaná stránka, stejně jako parametry řetězce dotazů - jsou chráněny (šifrovány), zatímco jsou „přes drát“, tj. Přenášejí se na cestu k cílovému serveru. Situace je naprosto stejná pro požadavky POST.

Webové servery samozřejmě ve svých přístupových protokolech mají tendenci zaznamenávat celou adresu URL jako prostý text; zasílání citlivých informací přes GET tedy není dobrý nápad. To platí bez ohledu na to, zda se používá HTTP nebo HTTPS.

Reference

  • wikipedia: POST (HTTP)
  • Metody požadavku HTTP
  • HTTP Post - W3.org
  • Získat HTTP - W3.org
  • Skryje protokol HTTPS přístupové adresy URL? - Výměna zásobníku