Jelenlegi hely

1.2.4. HTTP protokoll

A HTTP (HyperText Transfer Protocol) egy információátviteli protokoll a világhálón. Az eredeti célja a HTML lapok publikálása és fogadása volt.

A HTTP egy kérés-válasz alapú protokoll kliensek és szerverek között. A kommunikációt mindig a kliens kezdeményezi. A HTTP klienseket gyűjtőnéven user agentnek is nevezik. A user agent jellemzően, de nem feltétlenül webböngésző.

A HTTP általában a TCP/IP réteg felett helyezkedik el, de nem függ tőle.

HttpFox

A gyakorlatban a HTTP megismeréséhez a Firefox böngésző HttpFox nevű kiegészítője nagyszerű lehetőséget nyújt.

Az ábrán látszik, hogy a weboldal letöltéséhez (felül az első sor) milyen HTTP kérést küldött el a böngésző (lent balra), és milyen választ kapott a webszervertől (lent jobbra). A további sorok (fent) a HTML feldolgozása után szükséges CSS, JavaScript és kép állományok letöltését is mutatják.

A HttpFox működés közben

Kérés (request)

Egy HTTP kérés első sora mindig metódus erőforrás verzió alakú, például így:

GET /images/logo.gif HTTP/1.1

Ezt a sort követheti tetszőleges számú fejléc sor kulcs: érték alakban, például így:

Accept: text/plain,text/html
Accept-Language: en

A fejléc sorok végét egy üres sor jelzi, melyet az opcionális üzenettest követ. A sorokat a CRLF (azaz kocsi vissza + soremelés) karakterpárral kell elválasztani. A fejléc végét jelző üres sor csak ezt a két karaktert tartalmazhatja, nem lehet benne szóköz és tabulátor sem.

Metódusok

HTTP protokoll nyolcféle metódust definiál. A metódusok a megadott erőforráson végzendő műveletet határozzák meg.

  • HEAD: Ugyanazt adja vissza, mint a GET, csak magát az üzenettestet hagyja ki a válaszból.
  • GET: A megadott erőforrás letöltését kezdeményezi. Ez messze a leggyakrabban használt metódus.
  • POST: Feldolgozandó adatot küld fel a szerverre. Például HTML űrlap tartalmát. Az adatot az üzenettest tartalmazza.
  • PUT: Feltölti a megadott erőforrást.
  • DELETE: Törli a megadott erőforrást.
  • TRACE: Visszaküldi a kapott kérést. Ez akkor hasznos, ha a kliens oldal arra kíváncsi, hogy a köztes gépek változtatnak-e illetve mit változtatnak a kérésen.
  • OPTIONS: Visszaadja a szerver által támogatott HTTP metódusok listáját.
  • CONNECT: Átalakítja a kérést transzparens TCP/IP tunnellé. Ezt a metódust jellemzően SSL kommunikáció megvalósításához használják.

Biztonságosnak azokat a metódusokat nevezzük, amelyek csak információ lehívására szolgálnak és elvben nem változtatják meg a szerver állapotát. Más szóval mellékhatás nélküliek. Ilyenek például a HEAD, a GET, az OPTIONS és a TRACE. Fontos megjegyezni, hogy a gyakorlatban lehetnek a biztonságos metódusoknak is szerveroldali mellékhatásai.

Válasz (response)

A HTTP válasz első sora a státuszsor, amely verzió státuszkód indoklás alakú. A státuszkód egy három számjegyű szám, az indoklás egy angol nyelvű üzenet. Az előbbit inkább gépi, az utóbbit inkább emberi feldolgozásra szánták. Egy egyszerű példa státuszsorra:

HTTP/1.1 200 OK

A státuszkódok jelentését az RFC 26162 tartalmazza részletesen, az alábbi lista egy áttekintő osztályozást ad a kezdő számjegy alapján:

  • 1xx: Informatív – Kérés megkapva.
  • 2xx: Siker – A kérés megérkezett; értelmezve, elfogadva.
  • 3xx: Átirányítás – A kérés megválaszolásához további műveletre van szükség.
  • 4xx: Kliens hiba – A kérés szintaktikailag hibás vagy nem teljesíthető.
  • 5xx: Szerver hiba – A szerver nem tudta teljesíteni az egyébként helyes kérést.

A státuszsor után fejléc sorok következhetnek a HTTP kérésnél látott módon, például így:

Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8

A fejléc sorokat itt is üres sor zárja, melyet az opcionális üzenettest követ.

A következő ábra a teljes folyamatot ábrázolja egy XHTML állomány esetén:

Kérés-válasz folyamata

Munkamenet (session)

A HTTP egy állapot nélküli protokoll. Az állapot nélküli protokollok előnye, hogy a szervernek nem kell nyilvántartania felhasználói információkat az egyes kérések kiszolgálása között. A HTTP eredetileg nem arra készült, hogy felhasználók jelentkezzenek be rajta keresztül szerverekre és ott munkamenetet (session-t) indítsanak. Történetileg azonban úgy alakult, hogy a HTTP terjedt el széles körben más, felhasználói bejelentkezést támogató protokollok helyett, ami arra kényszerítette a webfejlesztőket, hogy kerülőutakon járva tárolják a felhasználók munkamenet-állapotait, ha arra szükség van.