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 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écetTerminológia forrása: 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).Persistent HTTP Connections in RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 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 azonban a kapcsolat-élettartam alapértelmezett időkorlátja (KeepAliveTimeout) mindössze 15 másodperc, az Apache 2.2-nél pedig 5 másodperc.Apache HTTP Server 2.2 - KeepAliveTimeout Directive 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.

Előnyei 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).

Hátrányai 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.

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.

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

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.

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. Az IE9-ben tovább tuningolták a hálózati viselkedést.IEBlog: Internet Explorer 9 Network Performance Improvements

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ó.

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ó.

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

Jegyzetek

További információk RFC 2616 (HTTP/1.1), 8.1 Persistent Connections Persistent Connection Behavior of Popular Browsers (dated) Apache Keep-Alive Support Network Performance Effects of HTTP/1.1, CSS1, and PNG

Kapcsolódó szócikkek HTTP pipelining

Fordítás

Kategória:HTTP