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.

A kérések csatornázása drámai javulást hozhat 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, í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.

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.

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

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

Implementációja webszerverekben

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

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.

Implementációja webes proxykban

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

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

Egyéb implementációi

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

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

Jegyzetek

  1. 1 2 "part of Hypertext Transfer Protocol -- HTTP/1.1 Section 8.1.2.2 Pipelining". W3C. 1999. június. Hozzáférés: 2012. május 10.
  2. ↑ Nielsen, Henrik Frystyk; Gettys, Jim; Baird-Smith, Anselm; Prud'hommeaux, Eric; Lie, Håkon Wium; Lilley, Chris (1997. június 24.). "Network Performance Effects of HTTP/1.1, CSS1, and PNG". World Wide Web Consortium. Hozzáférés: 2012. május 10.
  3. 1 2 Willis, Nathan (2009. november 18.). "Reducing HTTP latency with SPDY". LWN.net.
  4. ↑ "part of Hypertext Transfer Protocol -- HTTP/1.1 Section 9.1.2 Idempotent Methods". W3C. 1999. június. 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 (2005). Firefox secrets. 180. o. ISBN 0975240242.
  8. ↑ "https://bugzilla.mozilla.org/show_bug.cgi?id=264354". Mozilla. Hozzáférés: 2012. május 10. {{cite web}}: External link in |title= (súgó)
  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 (2007. június 20.). "The State of Proxy Caching". 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é (2002. június 7.). "Change History of libwww". World Wide Web Consortium. Hozzáférés: 2012. május 10.
  15. ↑ "Using HTTP::Async for Parallel HTTP Requests (Colin Bradford)" (PDF). 2012. március 10. dátummal az eredeti (PDF) címrő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 (2008). Version Control with Subversion. O'Reilly Media. 238. o. ISBN 0596510330.{{cite book}}: CS1 karbantartás: több név: szerzőfelsorolás (link)
  19. ↑ Justin R. Erenkrantz (2007). "Subversion: Powerful New Toys" (PDF).
  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. dátummal az eredeti címről archiválva. Hozzáférés: 2012. május 10.
  23. ↑ "Archivált másolat". 2012. június 8. dátummal az eredeti címről archiválva. Hozzáférés: 2012. május 10.

Fordítás

További információk