
HTTP metody GET a POST
Kdy použít metodu GET a kdy POST. Rozdíly mezi metodami, datové limity a doporučení pro správné použití.
HTTP metody GET a POST jsou dva základní způsoby, jak prohlížeč komunikuje se serverem. Jejich správné použití ovlivňuje bezpečnost, výkon i funkčnost webových aplikací.
Základní rozdíly
| Vlastnost | GET | POST |
|---|---|---|
| Data v URL | Ano (query string) | Ne (v těle požadavku) |
| Viditelnost dat | Data viditelná v adresním řádku | Data skrytá (ale viditelná ve vývojářských nástrojích) |
| Záložky | Lze uložit do záložek | Nelze uložit s daty |
| Cache | Může být cachováno | Není cachováno |
| Historie prohlížeče | Zůstává v historii | Nezůstává v historii |
| Idempotence | Ano (opakované volání má stejný efekt) | Ne |
Co je idempotence?
Idempotentní operace je taková, která při opakovaném provedení dává stejný výsledek jako při prvním provedení. Metoda GET je idempotentní – když 10× načtete stejnou stránku, dostanete 10× stejný výsledek a na serveru se nic nezmění.
Metoda POST idempotentní není – když 10× odešlete objednávku, vytvoří se 10 objednávek. Proto prohlížeče zobrazují varování při obnovení stránky s POST požadavkem.
Datové limity
GET
Metoda GET má omezení délky URL, které se liší podle prohlížeče a serveru:
- Internet Explorer: 2 083 znaků
- Chrome, Firefox, Safari: přibližně 64 000 znaků
- Apache: výchozí limit 8 190 znaků (konfigurovatelné pomocí
LimitRequestLine) - Nginx: výchozí limit 8 KB pro celý požadavek
- IIS: 16 384 znaků
Doporučení: Pro maximální kompatibilitu nepřekračovat 2 000 znaků v URL.
POST
Metoda POST nemá teoretický limit na straně protokolu HTTP, ale existují praktická omezení:
- PHP:
post_max_size(výchozí 8 MB),upload_max_filesize(výchozí 2 MB) - Apache:
LimitRequestBody(výchozí neomezeno) - Nginx:
client_max_body_size(výchozí 1 MB) - IIS:
maxRequestLength(výchozí 4 MB)
Tyto limity lze na serveru upravit podle potřeby. Při vývoji na lokálním serveru (WAMP, XAMPP) se limity nastavují v souboru php.ini.
Kdy použít GET
Metodu GET použijte pro:
- Načítání dat – zobrazení stránky, článku, produktu
- Vyhledávání – výsledky vyhledávání by měly být sdílitelné přes URL
- Filtrování a řazení – parametry v URL umožní uložit konkrétní pohled
- Stránkování – číslo stránky v URL (
?page=2) - API požadavky na čtení – RESTful GET endpointy
GET je vhodný tam, kde potřebujete na výsledek odkázat nebo ho sdílet. Vyhledávače mohou stránky s query stringem indexovat, což je někdy nežádoucí (duplicitní obsah). V takovém případě se problém řeší pomocí <link rel="canonical">.
<!-- Vyhledávací formulář – GET je správná volba -->
<form action="/search" method="get">
<input type="text" name="q" placeholder="Hledat...">
<button type="submit">Hledat</button>
</form>
<!-- Výsledek: /search?q=dotaz -->
Kdy použít POST
Metodu POST použijte pro:
- Odesílání formulářů – registrace, přihlášení, kontaktní formuláře
- Nahrávání souborů – GET neumožňuje přenos souborů
- Citlivá data – hesla, osobní údaje, platební informace
- Operace měnící stav – vytvoření objednávky, odeslání komentáře
- Velký objem dat – cokoliv nad 2 000 znaků
<!-- Přihlašovací formulář – POST je bezpečnější -->
<form action="/login" method="post">
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">Přihlásit</button>
</form>
Bezpečnostní aspekty
GET není bezpečný pro citlivá data
- Data v URL se ukládají do historie prohlížeče
- URL se může objevit v logu serveru
- URL může být zachycena v HTTP Referer hlavičce
- URL může někdo zahlédnout přes rameno
POST není automaticky bezpečný
Samotné použití POST nezajišťuje bezpečnost. Pro skutečné zabezpečení je nutné:
- Používat HTTPS pro šifrování přenosu
- Implementovat CSRF ochranu
- Validovat a sanitisovat vstupní data na serveru
Přehled použití
| Situace | Metoda | Důvod |
|---|---|---|
| Zobrazení stránky | GET | Čtení dat, cachování |
| Vyhledávání | GET | Sdílení URL s výsledky |
| Přihlášení | POST | Citlivá data (heslo) |
| Registrace | POST | Vytvoření záznamu, citlivá data |
| Upload souboru | POST | Binární data, velký objem |
| Odeslání objednávky | POST | Změna stavu, neopakovat |
| Filtrování produktů | GET | Sdílení URL, záložky |
| Smazání položky | POST/DELETE | Změna stavu |
Další HTTP metody
Kromě GET a POST existují další metody používané zejména v REST API:
- PUT – aktualizace celého záznamu
- PATCH – částečná aktualizace záznamu
- DELETE – smazání záznamu
- HEAD – jako GET, ale vrací pouze hlavičky
- OPTIONS – zjištění podporovaných metod
HTML formuláře podporují pouze GET a POST. Pro ostatní metody je nutné použít AJAX nebo skrytý _method parametr.
Co si myslíte o tomto článku?
Diskuse
Související články
Jak udělat input s automatickou šířkou podle obsahu
Několik způsobů, jak dosáhnout toho, aby se textové pole rozšiřovalo a zužovalo podle délky zadaného textu.
Odeslání formuláře tlačítkem mimo něj
Jak odeslat formulář tlačítkem, které je mimo formulář.
Resetování <input type=file>
Jak resetovat (odstranit) hodnotu z <input>u pro upload souborů.
