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