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]![](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/thumb/2/2f/HTTP_persistent_connection_hu.svg/300px-HTTP_persistent_connection_hu.svg.png)
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]- ↑ 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.)
- ↑ Persistent HTTP Connections in RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1"
- ↑ 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.)
- ↑ 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.)
- ↑ Apache HTTP Server 2.2 - KeepAliveTimeout Directive
- ↑ 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.)
- ↑ 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>
- ↑ 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.)
- ↑ Tcl nano proxy server. (Hozzáférés: 2012. május 4.)
- ↑ 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.)
- ↑ IE8 speeds things up. stevesouders.com, 2008. március 10. (Hozzáférés: 2009. július 17.)
- ↑ IEBlog: Internet Explorer 9 Network Performance Improvements
- ↑ Network.http.keep-alive.timeout. mozillazine.org. (Hozzáférés: 2009. július 17.)
- ↑ 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.)
- ↑ 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]- RFC 2616 (HTTP/1.1), 8.1 Persistent Connections
- Persistent Connection Behavior of Popular Browsers (dated)
- Apache Keep-Alive Support Archiválva 2010. július 22-i dátummal a Wayback Machine-ben
- Network Performance Effects of HTTP/1.1, CSS1, and PNG
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.