HTTP pipelining

Adatcsatornával és adatcsatorna nélkül felépített kapcsolat sémája

A HTTP pipelining vagy HTTP-adatcsatornázás technikájával több HTTP-kérés küldhető egyetlen TCP-kapcsolaton keresztül anélkül, hogy meg kellene várni az egyes kérések válaszüzeneteit.[1]

A kérések csatornázása drámai javulást hozhat[2] a HTML-oldalak betöltésében, különösen nagy késleltetésű, például műholdas internetkapcsolatnál. Széles sávú internetnél azonban a gyorsulás kisebb mértékben jelentkezik, mivel a HTTP 1.1 szerint a kiszolgálónak szigorúan a kérések sorrendjében kell a válaszüzeneteket elküldenie,[1] így sor eleji blokkolás (Head-of-line blocking) léphet fel. Ebben a problémában a születőben lévő HTTP 2.0, illetve a Google által fejlesztett SPDY protokoll aszinkron működése jelenthet előrelépést.[3]

Mivel általában több HTTP-kérés elfér ugyanabban a TCP-csomagban, a HTTP pipelining alkalmazásával kevesebb TCP-csomagot kell a hálózatra kiküldeni, csökkentve a hálózati terhelést.

A nem idempotens metódusokat, mint a POST nem ajánlott beletenni az adatcsatornába. A GET és HEAD metódusok mindig csatornázhatók. Idempotens kérések szekvenciáját (pl. GET, HEAD, PUT és DELETE) attól függően lehet vagy nem lehet adatcsatornázni, hogy a szekvenciában szereplő kérések együtt értelmezve idempotensek-e.[4]

A HTTP pipelining működéséhez a kliensnek és a szervernek is támogatnia kell azt. A HTTP/1.1-nek megfelelő szerverek kötelezően támogatják a pipeliningot. Ez nem jelenti azt, hogy feltétlenül csatornázniuk is kell a válaszokat, csak annyit, hogy hibamentesen le kell kezelniük, ha a kliens csatornázott kéréssel fordul feléjük.

Elterjedése

[szerkesztés]

A HTTP Pipelining a HTTP/1.1 előtti verziókban nem támogatott.

Implementációja webszerverekben

[szerkesztés]

A webkiszolgálókban a HTTP-adatcsatornázás viszonylag egyszerűen megvalósítható; szinte csak annyi kell hozzá, hogy a hálózati pufferek ne legyenek eldobva az egyes HTTP-kérések között. Ebből kifolyólag a legtöbb modern webkiszolgáló problémamentesen kezeli a pipeliningot.

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

[szerkesztés]

Az elterjedtebb böngészők közül egyedül az Operában található működő és alapértelmezetten bekapcsolt megvalósítás. A többi böngésző vagy nem is tartalmazza a HTTP pipeliningot, vagy kikapcsolt állapotban található bennük.[3]

  • Az Internet Explorer 8 nem csatornázza a kéréseket, az esetleges hibás proxymegvalósítások és a sor eleji blokkolás elkerülése érdekében.[5]
  • A Mozilla által kiadott böngészők (mint a Mozilla Firefox, a SeaMonkey és a Camino) támogatják a pipeliningot, de alaphelyzetben ki van kapcsolva.[6][7] A kikapcsolás oka a hibásan működő kiszolgálókkal való problémák elkerülése.[8] Ha engedélyezve van a beállítás, a Mozilla böngészői különböző heurisztikákat alkalmaznak, például kikapcsolják a pipeliningot a régebbi IIS szerverek elérésénél.[9]
  • A Google Chrome a stabil verzióban (a 18-as verziótól kezdve) támogatja a pipeliningot http (de nem https) kapcsolatoknál, de ez alaphelyzetben ki van kapcsolva. Alapértelmezésben a 20-as verzióban tervezik bekapcsolni a pipeliningot.[10]

Implementációja webes proxykban

[szerkesztés]

A legtöbb HTTP-proxy nem támogatja a kimenő kérések adatcsatornázását.[11]

A Squid egyes verziói hajlandók legfeljebb két kimenő HTTP-kérés csatornázására. Ez alaphelyzetben ki van kapcsolva „sávszélesség-kezelési és hozzáférés-naplózási okokból”.[12] A Squid egyébként támogatja a kliensek felől érkező egyidejű kéréseket.

A Polipo proxy (utolsó verzió: 2010) teljes mértékben támogatja a HTTP pipeliningot.[13]

Egyéb implementációi

[szerkesztés]

A World Wide Web Consortium által kiadott libwww programkönyvtár az 1997. február 18-án kiadott 5.1 verziótól kezdve támogatja a HTTP-adatcsatornázást.[14] Természetesen az utódjának tekintett cURL is implementálja azt.

Egyéb alkalmazásfejlesztői könyvtárak, amelyek támogatják a HTTP pipeliningot:

  • Perl modulok, amelyek klienstámogatást nyújtanak: a HTTP::Async és az LWPng (libwww-perl New Generation) programkönyvtár.[15]
  • Az Apache Foundation HttpComponents projektje támogatja a pipeliningot a HttpCore NIO extensionsben.
  • A Microsoft .Net Framework 3.5 támogatja a HTTP pipeliningot System.Net.HttpWebRequest moduljában.[16]
  • A Qt 4.4-ben bevezetett QNetworkRequest osztály támogatja a HTTP Pipeliningot.[17]

Néhány más, HTTP-adatcsatornázást támogató alkalmazás:

A Multipart XHR egy szerveroldali szkripteléssel megtámogatott, tisztán Javascriptben implementált pipeline-megoldás.

A HTTP-adatcsatornázás tesztelését támogató eszközök közé tartoznak:

Kapcsolódó szócikkek

[szerkesztés]

Jegyzetek

[szerkesztés]
  1. a b part of Hypertext Transfer Protocol -- HTTP/1.1 Section 8.1.2.2 Pipelining. W3C, 1999. június 1. (Hozzáférés: 2012. május 10.)
  2. Network Performance Effects of HTTP/1.1, CSS1, and PNG. World Wide Web Consortium, 1997. június 24. (Hozzáférés: 2012. május 10.)
  3. a b Willis, Nathan: Reducing HTTP latency with SPDY. LWN.net, 2009. november 18.
  4. part of Hypertext Transfer Protocol -- HTTP/1.1 Section 9.1.2 Idempotent Methods. W3C, 1999. június 1. (Hozzáférés: 2012. május 10.)
  5. Wayback link of 'Windows Internet Explorer 8 Expert Zone Chat (August 14, 2008)'. Microsoft, 2008. augusztus 14. (Hozzáférés: 2012. május 10.)
  6. http://kb.mozillazine.org/Network.http.pipelining
  7. Cheah Chu Yeow. Firefox secrets, 180. o. (2005). ISBN 0975240242 
  8. https://bugzilla.mozilla.org/show_bug.cgi?id=264354. Mozilla. (Hozzáférés: 2012. május 10.)
  9. Source code – nsHttpConnection.cpp. Firefox source code. Mozilla, 2010. május 7. (Hozzáférés: 2012. május 10.)
  10. Peter Beverloo: Sub-pixel layout, Inspecting Web Socket Frames and Seamless Iframes
  11. Mark Nottingham: The State of Proxy Caching, 2007. június 20. (Hozzáférés: 2012. május 10.)
  12. squid : pipeline_prefetch configuration directive. Squid, 2009. november 9. (Hozzáférés: 2012. május 10.)
  13. Polipo — a caching web proxy. Juliusz Chroboczek, 2009. szeptember 18. (Hozzáférés: 2012. május 10.)
  14. Kahan, José: Change History of libwww. World Wide Web Consortium, 2002. június 7. (Hozzáférés: 2012. május 10.)
  15. Using HTTP::Async for Parallel HTTP Requests (Colin Bradford). [2012. március 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 10.)
  16. System.Net.HttpWebRequest & pipelining
  17. QNetworkRequest Class Reference Archiválva 2009. december 22-i dátummal a Wayback Machine-ben, Nokia QT documentation
  18. C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick. Version Control with Subversion. O'Reilly Media, 238. o. (2008). ISBN 0596510330 
  19. Justin R. Erenkrantz: Subversion: Powerful New Toys, 2007
  20. HTTP/HTTPS messages. Microsoft TechNet, 2005. január 21.
  21. How CICS Web support handles pipelining[halott link]
  22. Pipelined HTTP Client. [2012. március 13-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 10.)
  23. Archivált másolat. [2012. június 8-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. május 10.)

Fordítás

[szerkesztés]
  • Ez a szócikk részben vagy egészben a HTTP pipelining 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.

További információk

[szerkesztés]