Skip to content
Language:hu Author:Laborci Gergely
http

A HTTP-kérés és -válasz

Célok

A lecke végére el tudod olvasni egy HTTP-kérés és -válasz részeit, meg tudod mondani, mi a kezdősor, a fejléc és a törzs szerepe, és érted, miért nem egyetlen kérésből áll egy oldal megnyitása.

Miért kell közös üzenetformátum?

A böngésző és a szerver sosem találkozik előre egyeztetve: a böngészőt egy cég írta, a szervert egy másik, és mégis pontosan értik egymást. Ez csak úgy lehetséges, ha az üzenetek formája szabványos. A HTTP ezt a közös formát adja meg: mit kell tartalmaznia egy kérésnek, és milyen részekből áll a válasz.

A HTTP állapotmentes (stateless): minden kérést önállóan kezel, a szerver a protokoll szintjén nem emlékszik arra, mit kértek korábban. Hogy mégis „bejelentkezve maradunk”, azt a 7. fejezet magyarázza.

Egy oldal megnyitása

A hallgató megnyitja a https://kurzuspont.example/kurzusok/webprog címet. A böngésző kliensként kérést küld, a szerver választ ad:

sequenceDiagram
    actor H as Hallgató
    participant B as Böngésző
    participant S as Webes szolgáltatás
    H->>B: Kurzusoldal megnyitása
    B->>S: HTTP-kérés az erőforrásért
    S-->>B: HTTP-válasz
    B-->>H: Eredmény megjelenítése

A HTTP-t nem csak böngésző használja: mobilalkalmazás, parancssori eszköz vagy másik szerver is küldhet HTTP-kérést. A szerepek mindig a konkrét üzenetváltásra vonatkoznak.

A kérés részei

A következő egy valódi, curl parancssori eszközzel küldött kérés. A kimenet a gépen futó kipróbáló szerverről származik, amely a Kurzuspont egy kis modellje; a > jelű sorok a kimenő kérést, a < jelű sorok a válasz fejlécét mutatják:

$ curl -v http://localhost:8080/kurzusok/webprog -H 'Accept: text/html'
> GET /kurzusok/webprog HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/8.7.1
> Accept: text/html
>
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Date: Sun, 11 Oct 2026 16:45:19 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
< Transfer-Encoding: chunked
<
<h1>Webprogramozás 1.</h1>

A kérés három részre tagolható:

  1. Kezdősor: metódus (GET), a cél útvonala és lekérdezése, a HTTP-verzió.
  2. Fejlécek: név–érték párok. A Host megmondja, melyik hosztnak szól a kérés (így egy gép több nevet is kiszolgálhat), a User-Agent a klienst azonosítja, az Accept a kívánt válaszformátumot jelzi.
  3. Üres sor, majd törzs: a fejlécek végét üres sor jelzi. A szokásos GET-kérésnek nincs törzse.

A válasz részei

A válasz felépítése hasonló:

  1. Állapotsor: HTTP-verzió, státuszkód (200) és rövid szöveg (OK). A státuszkódokat a 2.4 lecke tárgyalja.
  2. Fejlécek: itt például a Content-Type a törzs formátumát adja meg, a Date a válasz idejét.
  3. Üres sor, majd törzs: a tényleges tartalom, itt egy HTML-részlet.

A 200 csak azt jelenti, hogy a HTTP-kérés protokollszinten sikeres volt, nem azt, hogy minden üzleti szempontból is rendben van.

flowchart TB
    subgraph Kérés
        K1[Kezdősor: metódus, cél, verzió] --> K2[Fejlécek]
        K2 --> K3[Üres sor]
        K3 --> K4[Törzs, ha van]
    end
    subgraph Válasz
        V1[Állapotsor: verzió, státuszkód] --> V2[Fejlécek]
        V2 --> V3[Üres sor]
        V3 --> V4[Törzs, ha van]
    end

Egy oldalhoz több kérés tartozhat

A felhasználó egy oldalt lát, de a kezdeti HTML további erőforrásokra hivatkozhat: stíluslapokra, képekre, betűkészletekre, programokra. A böngésző ezeket külön HTTP-kérésekkel tölti le. Egy oldal megnyitása tehát nem feltétlenül egyetlen párbeszéd.

flowchart LR
    H[HTML kérése] --> D[HTML-válasz]
    D --> C[Stíluslap kérése]
    D --> K[Kép kérése]
    D --> J[Program kérése]

A külön kérések ugyanahhoz vagy más szolgáltatásokhoz is mehetnek. A böngészők fejlesztői eszközeiben (Chrome, Firefox, Edge és a Safari is rendelkezik ilyennel) található hálózati panel (Network) pontosan ezt a listát mutatja; érdemes egyszer megnézni, hány kérésből áll egy ismert oldal betöltése.

HTTP és HTTPS

A címben a http:// vagy https:// az elérés módját jelzi. A HTTPS ugyanaz a HTTP, de védett (titkosított és hitelesített) kapcsolaton. A kérés–válasz alapminta nem változik, csak a kapcsolat védett. A védelem működését és határait a 4. fejezet tárgyalja. A HTTPS megléte önmagában nem bizonyítja, hogy a tartalom igaz vagy a szolgáltató megbízható.

Végigvezetett példa: a kurzusoldal betöltése

A Kurzuspont kurzusoldalának betöltése így zajlik:

  1. A böngésző GET /kurzusok/webprog kérést küld; a szerver 200-as választ ad a HTML-lel.
  2. A böngésző a HTML-t olvasva észreveszi, hogy stíluslap, program és logó is kell, és ezekre további GET kérést küld.
  3. Ha később a hallgató rákattint a „Jelentkezem” gombra, a böngésző új kérést indít (a 2.3 lecke szerint POST-tal).

Mindhárom lépés ugyanazt a formát használja: kezdősor, fejlécek, törzs. Ez a közös forma a HTTP ereje.

Gyakori tévhitek

Állítás Pontosítás
„A HTTP csak HTML-oldalakhoz kell.” Képek, adatok és más erőforrások is továbbíthatók vele.
„Egy oldal megnyitása egyetlen kérés.” A dokumentum további erőforráskéréseket indíthat.
„A 200 azt jelenti, hogy minden rendben van.” Csak a HTTP-szintű sikert jelzi.
„A HTTPS egy másik kérés–válasz modell.” Ugyanaz a HTTP, védett kapcsolaton.
„A szerver emlékszik rám az előző kérésből.” A HTTP állapotmentes; az emlékezést külön megoldások adják.

Röviden

  • A HTTP közös üzenetformátum a kliens és a szerver között.
  • Kérés: kezdősor, fejlécek, üres sor, opcionális törzs. Válasz: állapotsor, fejlécek, üres sor, opcionális törzs.
  • A 200 HTTP-szintű siker, nem feltétlenül üzleti siker.
  • Egy oldal betöltése több kérésből áll.
  • A HTTP állapotmentes.

Ellenőrző kérdések

  1. Milyen részekből áll egy HTTP-kérés?
  2. Mire való a Host fejléc?
  3. Miért indít a böngésző több kérést egyetlen oldal megnyitásakor?
  4. Mit jelent az, hogy a HTTP állapotmentes?

Tanulási források

Prerequisites (2)

  • kliens–szerver modell
  • URL

Teaches (1)

  • HTTP