HTTP

Wikipedia, Entziklopedia askea

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:'

HTTP eskaera mezuaren formatua.

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:'

HTTP erantzun mezuaren formatua.

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 loturak

Wikimedia Commonsen badira fitxategi gehiago, gai hau dutenak: HTTP Aldatu lotura Wikidatan