GET

Metóda HTTP

Špecifikácia metódy HTTP GET

Metóda GET požaduje prenos aktuálnej vybranej reprezentácie cieľového prostriedku. GET je primárnym mechanizmom získavania informácií a je predmetom takmer všetkých optimalizácií výkonu. Preto keď ľudia hovoria o získavaní nejakých identifikovateľných informácií prostredníctvom protokolu HTTP, majú spravidla na mysli vykonanie požiadavky GET.

Je lákavé uvažovať o identifikátoroch zdrojov ako o názvoch ciest vzdialeného súborového systému a o reprezentáciách ako o kópiách obsahu takýchto súborov. V skutočnosti je takto implementovaných mnoho zdrojov (pozri časť 9.1 o súvisiacich bezpečnostných úvahách). V praxi však takéto obmedzenia neexistujú. Rozhranie HTTP pre zdroj je rovnako pravdepodobne implementované ako strom obsahových objektov, programové zobrazenie na rôzne databázové záznamy alebo brána do iných informačných systémov. Dokonca aj keď je mechanizmus mapovania URI viazaný na súborový systém, pôvodný server môže byť nakonfigurovaný tak, aby vykonal súbory s požiadavkou ako vstup a poslal výstup ako reprezentáciu, a nie aby prenášal súbory priamo. Bez ohľadu na to, len pôvodný server musí vedieť, ako každý z jeho identifikátorov zdrojov zodpovedá implementácii a ako každá implementácia dokáže vybrať a odoslať aktuálnu reprezentáciu cieľového zdroja v odpovedi na GET.

Klient môže zmeniť sémantiku GET tak, aby to bola "žiadosť o rozsah", požadujúca prenos len niektorej časti (častí) vybranej reprezentácie, odoslaním poľa hlavičky Range v žiadosti (RFC7233).

Platobné zaťaženie v rámci správy s požiadavkou GET nemá definovanú sémantiku; odoslanie tela užitočného zaťaženia v požiadavke GET môže spôsobiť, že niektoré existujúce implementácie požiadavku odmietnu.

Odpoveď na požiadavku GET je možné ukladať do vyrovnávacej pamäte; vyrovnávacia pamäť ju MÔŽE použiť na uspokojenie nasledujúcich požiadaviek GET a HEAD, ak nie je v poli hlavičky Cache-Control uvedené inak (časť 5.2 dokumentu RFC7234).

Metóda HTTP GET bola špecifikovaná v časti 4.3.1 dokumentu RFC 7231 pracovnou skupinou pre internetové inžinierstvo (IETF) a konzorciom World Wide Web (W3C).

Opis metódy GET

Metóda GET protokolu HTTP je porovnateľná s digitálnym knihovníkom. Zdvorilo žiada server o predloženie údajov bez toho, aby do nich urobila akékoľvek zmeny – je to čisto pasívna žiadosť.

Čo robí metódu GET špeciálnou?

  1. Konzistentnosť: Predstavte si, že by ste knihovníka požiadali o tú istú knihu viackrát – vždy by ste dostali tú istú knihu. To isté platí pre požiadavku GET: konzistentne poskytuje rovnaký výsledok.
  2. Čítanie, nie zápis: Požiadavka GET má charakter pozorovateľa. Pozrie sa na dáta, ale nezmení ich.
  3. Informácie v URL: Považujte URL za adresu alebo kartičku s indexom. Ukazuje, ktorú knihu alebo informáciu hľadáte. Avšak pozor: tieto kartičky by nemali obsahovať súkromné poznámky, pretože ich môžu vidieť aj iní.
  4. Rýchle a efektívne odpovede: Vďaka schopnosti ukladať odpovede do vyrovnávacej pamäte môže metóda GET rýchlo reagovať na opakované požiadavky, podobne ako dobre organizovaný knihovník, ktorý presne vie, kde sa každá kniha nachádza.

Ale sú tu aj obmedzenia:

  1. Obmedzený priestor pre poznámky: URL má len obmedzený priestor pre informácie. Je to akoby ste písali na malú indexovú kartičku.
  2. Žiadne tajomstvá: Keďže URL sú viditeľné a môžu byť uložené, nemali by ste na ne zapisovať žiadne citlivé informácie.
  3. Bez zasahovania: Pozorovateľ neovplyvňuje to, čo pozoruje. Preto by metóda GET nemala byť používaná na úpravu údajov. Na to máme v našom digitálnom nástrojovom boxe iné nástroje.

Celkovo je metóda GET spoľahlivým a nevyhnutným nástrojom v digitálnom priestore, ktorý nám pomáha efektívne a bezpečne získavať informácie.

Príklad pre metódu HTTP GET

Request header:
GET /data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/58.0.3029.110 Safari/537
Accept: application/json
Accept-Language: de-DE,de;q=0.5
Connection: keep-alive
Cache-Control: max-age=0
Response header:
Content-Type: application/json
Date: Mon, 31 July 2023 14:58:12 GMT
Server: Apache/2.4.7 (Ubuntu)
Cache-Control: no-cache