Sobes.tech
Junior

Magyarázza el, miért létezik a kérés testje (body), a fejléc (headers) és a lekérdezési paraméterek (query parameters), és miért nem lehet őket egyesíteni egybe.

sobes.tech MI

Válasz az MI-től

A kérés (body), a fejléc (headers) és a lekérdezési paraméterek (query parameters) léteznek azzal a céllal, hogy elkülönítsék az HTTP-kérésben továbbított különböző típusú információkat, és nem kombinálhatók, mert különböző funkciókat töltenek be és különböző célt szolgálnak.

Lekérdezési paraméterek (Query Parameters)

  • A ? jel után kerülnek az URL-ben átadásra.
  • Az adatok szűrésére, rendezésére, lapozására vagy kis mennyiségű, nem bizalmas információ továbbítására használják, amelyek szükségesek a művelet végrehajtásához.
  • Gyakran GET kérésekkel használják, mivel nincs hozzá tartozó body.
  • Láthatók az URL-ben, ezért nem alkalmasak bizalmas adatok továbbítására.
  • Az URL hosszára korlátozottak.

Példa: GET /users?pageSize=10&page=2&sort=name

Fejlécek (Headers)

  • Meta-információkat továbbítanak a kérésről és a válaszról.
  • Tartalmaznak olyan adatokat, mint a tartalom típusa, kódolás, hitelesítési tokenek, kliens információk (User-Agent), gyorsítótárazás stb.
  • A kérés/válasz viselkedésének kezelésére használják, nem az operációs adatok továbbítására.

Fejléc példák: Content-Type: application/json Authorization: Bearer <token> User-Agent: Mozilla/5.0 (...)

A kérés teste (Body)

  • A szervernek továbbított fő adatok, amelyek feldolgozásra kerülnek.
  • Olyan kéréseknél használják, amelyek megváltoztatják a szerver állapotát (POST, PUT, PATCH) vagy nagy mennyiségű adatot küldenek.
  • Tipikus formátumok: JSON, XML, űrlapok (urlencoded/multipart).
  • Nincs méretkorlát (gyakorlati határok között).
  • Nem jelenik meg az URL-ben.

Példa a kérés testére (POST kéréshez):

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

Miért nem lehet összekapcsolni őket:

  • Szemantika: Minden rész saját szemantikus terhelést hordoz. A paraméterek meghatározzák, mit kérünk (szűrők), a fejlécek határozzák, hogyan kérjük (metainformációk), míg a test adatokat továbbít a feldolgozáshoz.
  • HTTP protokoll: Az HTTP szerkezete világosan elválasztja ezeket az összetevőket, lehetővé téve a kliens- és szerveralkalmazások számára, hogy helyesen értelmezzék és kezeljék azokat.
  • Teljesítmény és gyorsítótárazás: Az elkülönítés lehetővé teszi az HTTP-infrastruktúra (proxy, cache-ek stb.) számára, hogy hatékonyan kezelje a kéréseket, például ugyanazokkal az URL-paraméterekkel rendelkező GET-válaszokat cache-eljen.
  • Biztonság: A bizalmas adatok URL-ben történő továbbítása (paraméterek) nem biztonságos, mivel naplókban vagy böngészőelőzményekben rögzíthetik őket. Erre a kérés testét használják.
  • Korlátozások: A kérés paramétereinek hosszára vonatkozó korlátozás van az URL-ben, így nem alkalmas nagy adatmennyiség továbbítására. A kérés teste ennek nincs alávetve.

Ezeknek az elemeknek az egyesítése egyben a struktúra elvesztéséhez, a HTTP-kérések elemzésének és feldolgozásának megnehezítéséhez, valamint a biztonság és hatékonyság csökkenéséhez vezetne.