Sobes.tech
Junior

Vysvětlete, proč existuje tělo požadavku (body), hlavičky (headers) a parametry dotazu (query parameters), a proč je nelze sloučit do jednoho.

sobes.tech AI

Odpověď od AI

Tělo požadavku (body), hlavičky (headers) a parametry požadavku (query parameters) existují pro oddělení různých typů informací přenášených v HTTP požadavku, a nelze je sloučit, protože plní různé funkce a mají odlišné určení.

Parametry požadavku (Query Parameters)

  • Přenášejí se v URL za znakem ?.
  • Používají se k filtrování, třídění, stránkování dat nebo k přenosu malého množství nedůvěrných informací potřebných k provedení operace.
  • Často se používají s GET požadavky, protože nemají tělo požadavku.
  • Jsou viditelné v URL, proto nejsou vhodné pro přenos důvěrných dat.
  • Jsou omezeny délkou URL.

Příklad: GET /users?pageSize=10&page=2&sort=name

Hlavičky (Headers)

  • Přenášejí meta informace o požadavku a odpovědi.
  • Obsahují data jako typ obsahu, kódování, autentifikační tokeny, informace o klientovi (User-Agent), cachování atd.
  • Používají se k řízení chování požadavku/odpovědi, nikoli k přenosu dat samotné operace.

Příklady hlaviček: Content-Type: application/json Authorization: Bearer <token> User-Agent: Mozilla/5.0 (...)

Tělo požadavku (Body)

  • Obsahuje hlavní data, která jsou přenášena na server k zpracování.
  • Používá se s požadavky, které mění stav na serveru (POST, PUT, PATCH) nebo odesílají velké množství dat.
  • Typické formáty: JSON, XML, formuláře (urlencoded/multipart).
  • Není omezeno velikostí (v praktických mezích).
  • Nezobrazuje se v URL.

Příklad těla požadavku (pro POST požadavek):

{
  "name": "John Doe",
  "email": "john.doe@example.com"
}

Proč nelze sloučit:

  • Sémantika: Každá část nese svůj sémantický význam. Parametry určují co požadovat (filtry), hlavičky určují jak požadovat (metadata), a tělo přenáší data pro zpracování.
  • Protokol HTTP: Struktura HTTP jasně odděluje tyto komponenty, což umožňuje klientským a serverovým aplikacím je správně parsovat a zpracovávat.
  • Výkon a cachování: Oddělení umožňuje HTTP infrastruktuře (proxy, cache atd.) efektivně zpracovávat požadavky, například cachovat odpovědi na GET požadavky se stejnými parametry URL.
  • Bezpečnost: Přenos důvěrných dat v URL (parametrech) je nebezpečný, protože může být zaznamenán v logách nebo historii prohlížeče. Proto je vhodnější tělo požadavku.
  • Omezení: Parametry požadavku mají omezení délky URL, což je činí nevhodnými pro přenos velkých objemů dat. Tělo požadavku toto omezení nemá.

Sloučení těchto prvků do jednoho by vedlo ke ztrátě struktury, ztížení parsování a zpracování HTTP požadavků, a také ke kompromitaci bezpečnosti a efektivity.