HTTP

HTTP edo HyperText Transfer Protocol (Hipertestuaren transferentziarako protokoloa) World Wide Webean datuak elkartrukatzeko erabiltzen den protokoloa da. Hasierako helburua HTML orrialdeak argitaratu eta jasotzeko bidea ahalbidetzea zen.

HTTPk badu SSL bitartez kodetutako HTTPS deritzon aldaera bat ere.

HTTPk bi bertsio ditu: HTTP/1.0 RFC 1954 estandarrean definituta eta HTTP/1.1 RFC 2616 estandarrean definituta.

Funtzionamendua 

HTTP bezero eta zerbitzari arteko eskaera/erantzun protokolo bat da. HTTP bezero bat, web nabigatzaile bat, esate baterako, eskaera egiten du normalean TCP erabiliz urruneko zerbitzari bateko 80 portura konektatzeko. Ondoren, burualdeak eta MIME luzapenak bidaltzen dira eskatutako dokumentuaren eta konexioaren egoeraren metainformazioarekin. Zerbitzariak honi erantzun egiten dio behar den fitxategia bidaliz, erroreren bat azalduz edo dena delakoa eginez.
Esan beharra dago zerbitzariak ez duela bezeroaren eskaerei buruzko inolako informaziorik gordeko. Hori dela eta HTTP "egoera gabeko" protokoloa dela esaten da.

HTTP konexioak 

Funtzionamenduan adierazi den bezala, HTTP bezeroak TCP konexio bat ezarri beharko du zerbitzari bateko 80.portuarekin. HTTP konexio hauek bi motatakoak izan daitezke: Iraunkorrak edo Ez Iraunkorrak.

HTTP konexio EZ IRAUNKORRAK: HTTP bezero batek eskaera bakoitzeko TCP konexio bat ezarri eta askatu behar izango du. Beraz TCP konexio bakoitzean objektu bakarra bidali ahal izango da.

HTTP/1.0 HTTPren hasierako bertsioak era honetako konexioak erabiltzeko aukera ematen zuen bakarrik.

HTTP konexio IRAUNKORRAK: HTTP bezeroak botatako eskaera ezberdinak TCP konexio berdinean bota eta erantzun egingo dira. Beraz TCP konexio bakar batean HTTP bezeroak eta zerbitzariak objektu bat baino gehiago bidaltzeko aukera izango dute.
HTTP/1.1 bertsioak era honetako konexioak erabiltzen ditu defektuz. Era honetako konexioak erabiliz HTTP eskaeretan erantzun denbora laburragoak lor ditzakegu.

Gainera konexio iraunkorrak erabiltzeak beste aukera bat ematen digu: "Pipelining" delakoa.
"Pipelining" erabiltzen duen konexio iraunkor batek bezeroari eskaerak bata bestearen atzean botatzeko aukera ematen dio aurreko eskaeren erantzun edo baieztapena jaso aurretik. Hau da, HTTP bezeroak eskera bat bota duenean normalean zerbitzariaren erantzuna itxarotera behartuta egongo litzake, "Pipelining" darabilen HTTP konexio Iraunkor batean berriz bezeroak eskaerak paraleloan botatzeko aukera izango du aurrekoen erantzuna itxaron gabe, modu horretan azkarragoa izanik. Dena den "Pipelining" erabiltzean paraleloan egin ditzakegun konexioak zerbitzari bati mugaturik daude, zerbitzaria blokea ez dadin.

HTTP mezuak 

HTTP protokoloak bi mezu mota ditu RFC 1954 eta RFC 2616 estandarretan definituta: eskaerako mezua eta erantzun mezua. Mezu hauek 8 biteko ASCIIan idatzi egiten dira, beraz nahiko errez irakur daitezke.Hona hemen bi mezu hauen egitura eta eremu ezberdinei buruzko azalpenak:

'Eskaera mezua:'

adibide bat:

GET /products/list.html HTTP/1.1

Host: www.dendabat.eu

User-Agent: Mozilla/5.0

Connection: keep alive

If-modified-since: Mon, 23 Nov 2009 10:43:55 GMT

Accept-language: eu

Cookie: dendabat_idusr=SDfla80AABQc28s-f21a381a022f63a5cd2dbf11868

Adibidean ikus dezakegu GET metodoa erabiltzen dela. Metodo ezberdinak beherago ikusi daitezke. Agertzen zaizkigun goiburu ezberdinen azalpena:

Host: zeini egin diogun konexioa

User-Agent: web arakatzailearen bertsioa

Connection: konexio iraunkorra(Keep Alive) edo konexio ez iraunkorra (close) erabiltzen gaudela adierazteko

If-modified-since: eremu honetan data bat sartzen da, hain zuzen ere bezeroak bere "caché" memorian duen objektuaren kopiaren data zehazten duena. Eremu honen bidez BALDINTZAZKO GET eskaera bat egiten dugu. Bezeroak bere "caché" memorian duen objektuaren kopiaren data bidaltzean zerbitzariari galdetzen dio ea data horretatik aurrera objektu horretan aldaketarik egon den, aldaketa egon bada zerbitzariak bere erantzun mezuan objektu horren bertsio berria bidaliko dio, aldaketarik egon ez bada zerbitzariak bere erantzun mezuan ez du objekturik bidaliko (gainera erantzun mezua 304 Not Modified modukoa izango da).

Accept-language: web orrialde batek orrialdearen hizkuntza bertsio ezberdinak baditu eremu honen bidez hizkuntza konkretu bat eskatzen zaio( eu-euskara, en-ingelesa, it-italiera…). Eskatzen dugun hizkuntza ez badago defektuz hizkuntzaren orrialde bertsioa itzuliko digu.

Cookie: eremu honetan cookie konkretu baten identifikadorea bidali egiten da, gurekin eta eskaera egin diogun webgunearekin erlazionatuta dagoen cookie-arena hain zuzen.
Beste eremu asko daude, baina ezin ditugu denak azaldu.

'Erantzun mezua:'

adibide bat:

HTTP/1.1 200 OK

Connection close

Date: Mon, 18 Jan 2010 10:43:55 GMT

Server: Mathopd/1.3pl7.7

Last-Modified: Mon, 23 Nov 2009 10:43:55 GMT

Set-Cookie: DendabatAccountsLocale_session=en

Content-Type: image/jpeg

Content-Length: 5270

(lerro zuria)

Datuak datuak datuak datuak…

HTTP/1.1 bertsioaren erabateko erantzun baiezkorreko egoera kodea jaso dugu adibidean.
Ikus ditzagun orain agertzen diren goiburuak:

Connection close: mezu honekin konexioa itxi egin dela adierazten da.

Date: egundo data jartzen da adierazten da eremu honetan.

Server: erabiltzen den zerbitzariaren mota.

Last-Modified: eskatu egin den objektuaren azkeneko bertsioaren data. BALDINTZAKO GET eskaeretan eremu hau objektu bat bidaltzen denean jaso eta gorde egiten da jakiteko zein izan den objektuaren azken bertsio data.

Set-Cookie: Gure eskaeran Cookie-aren identifikazioa bidali ez bada gure ordenagailuan ez dugulako, zerbitzariak set-cookie eremu honen bidez cookie-a ezartzeko eskatzen digu eta normalean identifikadore bat pasako digu gure cookie horrentzako.

Content-Type: bidali egiten den objektuaren izaera zein den adierazten dugu hemen.

Content-Length: bidali egiten den objektuaren tamaina zein den adierazten da, byte-etan.

Metodoak 

 GET: Baliabide baten eskaera egiten du. Hau da, gaur egun, metodorik erabiliena.
 HEAD: GET eskaera baten antzekoa da, baina erantzunaren gorputza ez du eskatzen, burualdea baino ez. Eduki osoa ez eta metainformazioarekin nahikoa denean erabili ohi da.
 POST: Erabiltzaile datuak bidaltzeko balio du, hala nola formulario bateko datuak.
 PUT: Baliabide bat zerbitzarira igotzeko balio du.
 DELETE: Zehaztutako baliabidea ezabatzen du. Hau oso gutxitan erabiltzen da.
 TRACE: Jasotako eskaera errepikatzen du, erdikariren bat eskaeran aldaketak egiten ari den jakiteko.
 OPTIONS: Zerbitzariak onartzen dituen HTTP metodo zerrenda bueltatzen du.
 CONNECT: SSL tunel bat izatera pasa daitekeen proxy batekin erabiltzeko.

Erantzun kodeak 

Hiru digituz osatuta egoten dira:

 1xx Informazio mezuak
 100 Jarraia
 101 Protokolo aldaketa

 2xx Eragiketa arrakastatsua
 200 OK
 201 Sortua
 202 Onartua
 203 Informazio ez ofiziala
 204 Edukirik gabe
 205 Reset-erako edukia
 206 Eduki partziala

 3xx Beste URL baterako berbideraketa
 300 Aukera anizkoitza
 301 Aldaketa iraunkorra
 302 Aurkituta
 303 Beste batzuk ikusi
 304 Aldatu gabea
 305 Proxy bat erabili
 307 Denborazko berbideraketa

 4xx Bezeroaren aldeko errorea
 400 Eskaera ezegokia
 401 Baimenik ez
 402 Ordainketa beharrezkoa
 403 Debekatua
 404 Ez da aurkitu
 405 Baimendu gabeko metodoa
 406 Ez onargarria
 407 Proxy beharrezkoa
 408 Itxarote denbora iragan da
 409 Gatazka
 410 Maparik ez eskuragarri
 411 Luzera beharrezkoa
 412 Aurrebaldintzak huts egin du
 413 Eskaera entitate luzeegia
 414 Eskaera URI luzeegia
 415 Baliogabeko medioa
 416 Eskatutako tartea ez dago eskuragarri
 417 Aukerak huts egin du

 5xx Zerbitzariaren aldeko errorea
 500 Barne errorea
 501 Inplementatu gabea
 502 Igarobide ezegokia
 503 Zerbitzua ez dago eskuragarri
 504 Igarobideko itxarote denbora iragan da
 505 Baliogabeko HTTP bertsioa

Kanpo estekak 

  RFC-2616
  RFC-1954
  W3Cren zehaztapenak HTTP protokoloaren inguruan
  HTML oinarrizko gida
  HTML etiketen zerrenda

Aplikazio geruzako protokoloak
Informatikako akronimoak
Interneteko protokoloak