HTTP persistent connection

Az állandó HTTP-kapcsolat, perzisztens HTTP-kapcsolat, HTTP persistent connection, HTTP keep-alive (életben tartott HTTP) vagy HTTP connection reuse (HTTP-kapcsolat-újrafelhasználás) lényege ugyanannak a TCP-kapcsolatnak a felhasználása több HTTP-kérés és -válasz elküldésére, illetve fogadására, ellentéttel a hagyományos megoldással, amikor minden kérés-válasz párhoz külön TCP-kapcsolatot nyitnak.

Működése szerkesztés

Maga a HTTP 1.0 nem specifikálja hivatalosan, hogyan kell a TCP-kapcsolatot fenntartani. Lényegében egy már létező protokollba erőltették bele az új funkcionalitást. Ha a webböngésző támogatja a keep-alive-ot, a kéréshez a következő életben tartási fejlécet[1] fűzi hozzá:

Connection: Keep-Alive

Ha a kiszolgáló támogatja a perzisztens HTTP-kapcsolatokat, szintén hozzáfűz egy fejlécet a válaszhoz:

Connection: Keep-Alive

Ezt követően a kapcsolatot nem szakítják meg, hanem nyitva hagyják. Ha a kliens új kérést akar küldeni, a már meglévő kapcsolatot használja föl erre. Ez egészen addig megtörténhet, amíg vagy a kliens, vagy a szerver nem dönt úgy, hogy bontja a kapcsolatot.

A HTTP 1.1-ben a kapcsolatok alapértelmezés szerint perzisztensek, kivéve, ha a felek ezzel ellentétesen deklarálják (a kapcsolati fejlécben a „close” kapcsolati tokennel).[2] A HTTP 1.1 szerinti állandó kapcsolatok nem használnak külön életben tartási üzeneteket, egyszerűen lehetővé teszik, hogy több HTTP-kérés ugyanazt a kapcsolatot használja. Az Apache 2.0 httpd-ben[3] azonban a kapcsolat-élettartam alapértelmezett időkorlátja[1] (KeepAliveTimeout) mindössze 15 másodperc,[4] az Apache 2.2-nél pedig 5 másodperc.[5] Az alacsony időkorlát előnye, hogy a weboldal komponenseit anélkül lehet gyorsan, egyetlen kapcsolaton keresztül eljuttatni a böngészőhöz, hogy a kiszolgálón több processzt vagy threadet hosszú ideig le kellene kötni.[6]

Előnyei szerkesztés

  • Alacsonyabb processzoridő- és memóriahasználat (mivel kevesebb kapcsolatot kell egyszerre nyitva tartani)
  • Lehetővé teszi a HTTP-kérések és -válaszok adatcsatornázását (HTTP pipelining)
  • Csökkent hálózati túlterheltség (kevesebb TCP-kapcsolat)
  • Kisebb hálózati késleltetés az egymás utáni kérések között (nincs szükség új háromfázisú kézfogásra)
  • Lehetőség van a hibák jelzésére a TCP-kapcsolat lezárása nélkül.

Az RFC 2616 szerint egy egyfelhasználós kliensnek legfeljebb két kapcsolatot szabad fenntartania egy szerver vagy proxy felé. A proxy szerver számára legfeljebb 2×N kapcsolatot szabad fenntartani egy másik szerver vagy proxy felé, ahol N az egyidejűleg aktív kliensek számát jelöli. Ezek az irányelvek arra szolgálnak, hogy a HTTP válaszidejét javítsák és a hálózati túlterheltséget elkerüljék. Megfelelően implementált HTTP pipelining esetén nem jelent nyereséget újabb kapcsolatok kiépítése (ellenben az új kapcsolatok problémát okozhatnak a hálózat túlterhelődése miatt).[7]

Hátrányai szerkesztés

Egyes vélemények szerint a széles sávú kapcsolatok elterjedése óta a perzisztens kapcsolatok nem olyan hasznosak, mint azelőtt voltak. A webkiszolgáló bizonyos ideig nyitva fogja tartani kapcsolatot (Apache 2.0-nál 15 másodpercig), ami a szerver összteljesítményének többet árthat, mint amennyit az adott kapcsolatnál nyerni lehet vele. [8]

Az olyan szolgáltatások esetében, ahol általában egy-egy dokumentum kerül lekérésre (például képmegosztó oldalakon) a Keep-Alive jelentősen visszavetheti a teljesítményt, mivel a dokumentum letöltése után akár tíz másodpercekig is fölöslegesen nyitva maradnak a TCP-kapcsolatok.

A Keep-Alive beállítása proxy használata esetén is komplikációt okozhat. Ha egy böngésző állandó kapcsolatot épít ki egy proxy felé, ugyanezen a kapcsolaton keresztül különböző állomások felé küldhet HTTP-kéréseket. Ha egy kezdetleges proxy ezek után állandó kapcsolatot épít ki egy távoli szerver felé, tévedésből a más szervernek szánt HTTP-kéréseket is oda küldheti.[9]

Implementációja webböngészőkben szerkesztés

 
Több kapcsolat nyitása vs. perzisztens kapcsolat

A Netscape Navigator (legalább a 4.05-től kezdve) és az Internet Explorer (legalább a 4.01-től kezdve) támogatják a webkiszolgálók és a proxyk felé nyitott perzisztens kapcsolatokat.

A Netscape nem végzett időzített lezárást a perzisztens kapcsolatokon. Az összes tétlen perzisztens kapcsolatot egy várakozási sorba helyezte, és ha új perzisztens kapcsolatra volt szüksége, megszüntette közülük a legrégebben használt kapcsolatot.[10]

Az Internet Explorer is támogatja a perzisztens kapcsolatokat. Alapértelmezetten az IE6 és az IE7 szerverenként két perzisztens kapcsolatot használ, az IE8 pedig 6-ot.[11] Az IE9-ben tovább tuningolták a hálózati viselkedést.[12]

A perzisztens kapcsolatokat az Internet Explorer 60 másodperc tétlenség után bezárja, ez az érték a beállításjegyzékben finomhangolható.[1]

A Mozilla Firefox is támogatja a perzisztens kapcsolatokat. Az egyidejű kapcsolatok száma konfigurálható (szerverenként, illetve proxynként; alapértelmezésben 6, illetve 8). A perzisztens kapcsolatokat 115 másodperc (1,92 perc) tétlenség után zárja le, ez az érték is konfigurálható.[13]

Az Opera a 4.0 verziótól kezdve támogatja az állandó HTTP-kapcsolatokat.[14] Az egyidejű kapcsolatok száma alapértelmezetten 8, konfigurálható szerverenként és a teljes kapcsolatszám szerint is.[15]

Jegyzetek szerkesztés

  1. a b c Terminológia forrása: Microsoft Terméktámogatás: Kapcsolat-élettartam időkorlátja alapértelmezett értékének megadása az Internet Explorer programban. Microsoft, 2007. október 27. (Hozzáférés: 2012. május 22.)
  2. Persistent HTTP Connections in RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1"
  3. Apache HTTP Server - KeepAlive Directive. [2012. január 21-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. január 19.)
  4. Apache HTTP Server 2.0 - KeepAliveTimeout Directive. [2013. május 3-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 22.)
  5. Apache HTTP Server 2.2 - KeepAliveTimeout Directive
  6. Multiple (wiki): Httpd/KeepAlive. Docforge. [2010. január 6-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 21.)
  7. Nielssen, Henryk; Gettys, James & et. al. (September 17, 1997), "Network Performance Effects of HTTP/1.1, CSS1, and PNG", Computer Communication Review 27 (4), ISSN 0146-4833, <http://conferences.sigcomm.org/sigcomm/1997/papers/p102.html>
  8. HTTP KeepAlive Considered Harmful, 2011-01-23, <http://mocko.org.uk/b/2011/01/23/http-keepalive-considered-harmful/>. Hozzáférés ideje: 2011-09-23 Archiválva 2011. augusztus 26-i dátummal a Wayback Machine-ben Archivált másolat. [2011. augusztus 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 22.)
  9. Tcl nano proxy server. (Hozzáférés: 2012. május 4.)
  10. Zhe Wang and Pei Cao: Persistent Connection Behavior of Popular Browsers. University of Wisconsin-Madison, 1998. december 9. (Hozzáférés: 2009. július 8.)
  11. IE8 speeds things up. stevesouders.com, 2008. március 10. (Hozzáférés: 2009. július 17.)
  12. IEBlog: Internet Explorer 9 Network Performance Improvements
  13. Network.http.keep-alive.timeout. mozillazine.org. (Hozzáférés: 2009. július 17.)
  14. Opera 4.0 Upgrades File Exchange: Includes HTTP 1.1. Opera Software, 2000. március 28. [2010. szeptember 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. július 8.)
  15. Opera Browser Wiki: The HTTP/1.1 Protocol. [2012. június 7-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 22.)

További információk szerkesztés

Kapcsolódó szócikkek szerkesztés

Fordítás szerkesztés

Ez a szócikk részben vagy egészben a HTTP persistent connection című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.