HTTP -Pipelining

Zeitdiagramm der nicht pipelierten und pipelierten Verbindung

HTTP -Pipelining ist ein Merkmal von Http/1.1 Dies ermöglicht mehrere Http Anfragen, die über eine einzige gesendet werden sollen TCP (Transmission Control Protocol) Verbindung, ohne auf die entsprechenden Antworten zu warten.[1] Bei der Spezifikation von HTTP/1.1 müssen Server auf Pipeline-Anforderungen korrekt reagieren und nicht pipelierte, aber gültige Antworten zurücksenden, selbst wenn der Server HTTP-Pipelining nicht unterstützt. Trotz dieser Anforderung unterstützen viele ältere HTTP/1.1 -Server das Pipelining nicht korrekt und zwingen die meisten HTTP -Clients dazu, in der Praxis keine HTTP -Pipelinierung zu verwenden.

Die Technik war abgelöst durch Multiplexing über Http/2,[2] das wird von den meisten modernen unterstützt Browser.[3]

Im Http/3Das Multiplexing wird durch das neue zugrunde liegende erreicht Quic Transportprotokoll, das ersetzt TCP. Dies verkürzt die Ladezeit weiter, da es keine gibt Zeilenblockierung mehr.

Motivation und Einschränkungen

Das Pipelining von Anfragen führt zu einer dramatischen Verbesserung[4] In den Ladezeiten von HTML -Seiten, insbesondere über hoch Latenz Verbindungen wie Satelliten -Internetverbindungen. Die Beschleunigung ist bei Breitbandverbindungen weniger erkennbar, da die Einschränkung von HTTP 1.1 weiterhin gilt: Der Server muss seine Antworten in der gleichen Reihenfolge senden, in der die Anforderungen empfangen wurden - so bleibt die gesamte Verbindung bestehen als Erster rein, als erster raus[1] und Hol blockieren kann auftreten.

Der asynchrone Betrieb von Http/2 und Spdy sind Lösungen dafür.[5] Die Browser haben letztendlich nicht das Pipelining ermöglicht, und bis 2017 unterstützten die meisten Browser standardmäßig HTTP/2, was stattdessen Multiplexing verwendete.[2]

Nicht-idempotent Anfragen, wie sie verwenden POST, sollte nicht pipeliniert werden.[6] Sequenzen von ERHALTEN und KOPF Anfragen können immer pipeliert werden. Eine Folge anderer idempotenter Anfragen wie STELLEN und LÖSCHEN Kann pipeliniert werden oder nicht, abhängig davon, ob Anforderungen in der Reihenfolge von der Auswirkung anderer abhängen.[1]

HTTP -Pipelining erfordert, dass sowohl der Client als auch der Server dies unterstützen. Http/1.1 Es sind konforme Server erforderlich, um Pipelining zu unterstützen. Dies bedeutet nicht, dass Server Antworten zur Pipeline -Antworten verpflichtet sind, dass sie jedoch nicht scheitern müssen, wenn ein Client Pipeline -Anforderungen entscheidet.[7]

Die meisten Pipelining -Probleme können in HTTP auftreten Zwischenknoten (hop-by-hop), d. h. hauptsächlich in Proxy -Server (Proxies), insbesondere auf transparenten Proxy -Servern (da sie ohnehin verwendet werden, ohne dass Benutzer -Client -Konfiguration erforderlich ist. Wenn also nur einer von ihnen entlang der HTTP -Kette Pipeled -Anforderungen nicht ordnungsgemäß behandelt, funktioniert nichts so wie es sollte).[8]

Verwendung Pipelining mit http Proxy Server ist normalerweise nicht empfohlen auch weil die Hol blockieren Problem kann wirklich langsamer viel Proxy -Server -Antworten (Da die Serverantworten in derselben Reihenfolge der empfangenen Anforderungen liegen müssen).[1] [9]

Beispiel: Wenn ein Client 4 pipelierte GET -Anforderungen an einen Proxy über eine einzige Verbindung sendet und der erste nicht in seinem Cache steht, muss der Proxy diese Anforderung an den Ziel -Webserver weiterleiten. Wenn stattdessen die folgenden drei Anfragen in seinem Cache gefunden werden, muss der Proxy auf die Webserverantwort warten, dann muss er ihn an den Client senden und kann dann auch die drei zwischengespeicherten Antworten senden.

Wenn ein Client stattdessen 4 Verbindungen zu einem Proxy öffnet und 1 GET -Anforderung pro Verbindung (ohne Pipelining) sendet (Weil Anfragen parallel ohne Line-Blockierungsproblem gestellt werden).[10] Der gleiche Vorteil, aber mit mehr Geschwindigkeit, tritt in HTTP/2 -Multiplex -Streams auf.

Implementierungsstatus

Das Pipelining wurde in HTTP/1.1 eingeführt und war in HTTP/1.0 nicht vorhanden.[11]

Es sieht so aus, als würde es von Anfang an die richtige HTTP -Pipelination implementieren und / oder die Bereitstellung für niemanden (mit Ausnahme von Entwicklern von Webservern) eine leichte Aufgabe war. Es gab immer Beschwerden über Browser, Proxy -Server usw., die bei Verwendung von Pipelined -Anforderungen / Antworten nicht gut funktionieren, bis zu dem Punkt, dass Softwareentwickler, Ingenieure, Webexperten usw. seit vielen Jahren (zumindest 2011) versucht haben Die verschiedenen Probleme, die sie feststellten, um Dinge zu beheben und Ratschläge zu geben, wie sie mit Pipelining im offenen Netz umgehen können.[8]

Implementierung in Webservern

Implementierung von Pipelining in Webserver ist eine relativ einfache Frage, um sicherzustellen, dass Netzwerkpuffer nicht zwischen Anfragen verworfen werden. Aus diesem Grund verarbeiten die meisten modernen Webserver (die HTTP/1.1 vollständig implementieren) Pipelining ohne Probleme.

Implementierung in Webbrowsern

Von allen wichtigen Browsern nur Oper bezogen auf Presto Die Layout -Engine hatte eine voll funktionsfähige Implementierung, die standardmäßig aktiviert war. In allen anderen Browsern wurde HTTP -Pipelining deaktiviert oder nicht implementiert.[5]

  • Internet Explorer 8 Pipeline Anfragen nicht, aufgrund von Bedenken hinsichtlich fehlerhafter Proxies und Zeilenblockierung.[9]
  • Internet Explorer 11 unterstützt Pipelining nicht.[12]
  • Mozilla Browser (wie z. Mozilla Firefox, Seeaffe und Camino) Support Pipelining; Es ist jedoch standardmäßig deaktiviert.[13][14] Das Pipelining ist standardmäßig deaktiviert, um Probleme mit Fehlbehnen von Servern zu vermeiden.[15] Wenn die Pipelinierung aktiviert ist, verwenden Mozilla -Browser einige Heuristiken, insbesondere um das Pipelining für ältere Abmeldungen abzuschalten Iis Server.[16] Die Unterstützung für H1 -Pipeline wurde in Version 54 von Mozilla Firefox entfernt.[17]
  • Konqueror 2.0 unterstützt Pipelining, ist jedoch standardmäßig deaktiviert.[18]
  • Google Chrome zuvor unterstütztes Pipelining, wurde jedoch aufgrund von Fehlern und Problemen mit schlecht verhaltensfreien Servern deaktiviert.[19]
  • Pale Mond (Webbrowser) Unterstützt Pipelining und ist standardmäßig aktiviert.[20]

Implementierung in Web -Proxy -Servern

Die meisten HTTP -Proxys pipeline ausgehende Anfragen nicht.[21]

Einige HTTP -Proxys, einschließlich transparenter HTTP -Proxies, können Pipelined -Anfragen sehr schlecht verwalten (d. H. Durch Mischen der Reihenfolge der Pipelinedantworten usw.).[22]

Einige Versionen der Tintenfisch Web -Proxy pipeline bis zu zwei ausgehenden Anfragen. Diese Funktionalität wurde standardmäßig deaktiviert und muss aus "Bandbreitenverwaltungs- und Zugriffs -Protokollierungsgründen" manuell aktiviert werden.[23] Squid unterstützt mehrere Anfragen von Kunden.

Das Polipo Proxy -Pipelines ausgehende Anfragen.[24]

Tempesta FW, eine Open Source Anwendungsbereitstellung,[25] Auch Pipelines -Anfragen an Backend -Server.[26]

Andere Implementierungen

Das libwww Bibliothek gemacht von der World Wide Web Konsortium (W3C) unterstützt Pipelining seit Version 5.1, die am 18. Februar 1997 veröffentlicht wurde.[27]

Weitere Bibliotheken für Anwendungsentwicklung, die HTTP -Pipelining unterstützen, umfassen:

  • Perl -Module, die Client -Unterstützung für HTTP -Pipelining bieten, sind http :: async und das lwpng (libwww-perl Neue Generation) Bibliothek.[28]
  • Das Microsoft .NET Framework 3.5 unterstützt HTTP -Pipelining im Modul System.net.httpwebrequest.[29]
  • Qt Klasse QnetworkRequest, eingeführt in 4.4.[30]

Einige andere Anwendungen, die derzeit Pipelining ausnutzen, sind:

  • Eisbrechungsanwendungsserver seit Build389
  • phttpget von Freebsd (Ein minimalistischer HTTP -Client)[31]
  • libcurl Zuvor hatte eine begrenzte Unterstützung für das Pipelining mit der Option curlmopt_pipelining,[32] Diese Unterstützung wurde jedoch in Version 7.65.0 entfernt[33]
  • Portsnap (a Freebsd Ports Baum Vertriebssystem)
  • Erweitertes Verpackungstool (APT) unterstützt Pipelining.
  • Subversion (SVN) unterstützt optional für HTTP -Pipelining mit dem SWER WebDAV -Zugriffsmodul (das Standardmodul Neon bietet keine Pipelining -Unterstützung).[34][35]
  • Microsoft Message Queuing an Windows Server 2003 Verwendet standardmäßig Pipelining auf HTTP und kann so konfiguriert werden, dass es auf HTTPS verwendet wird.[36]
  • IBM CICs 3.1 unterstützt HTTP -Pipelining innerhalb seines Kunden.[37]

Testwerkzeuge, die HTTP -Pipelining unterstützen, umfassen:

Siehe auch

Verweise

  1. ^ a b c d "Hypertext -Transferprotokoll (HTTP/1.1): Nachrichtensyntax und Routing: Pipelining". ietf.org. Abgerufen 2014-07-24.
  2. ^ a b "Revision 1330814 | Verbindungsmanagement in http/1.x | mdn". MDN Web Docs. Abgerufen 2018-03-19.
  3. ^ "HTTP2 -Browser -Unterstützung". Abgerufen 9. März, 2017.
  4. ^ Nielsen, Henrik Frystyk; Gettys, Jim; Baird-Smith, Anselm; Prud'hommeaux, Eric; Lüge, Håkon Wium; Lilley, Chris (24. Juni 1997). "Netzwerkleistungseffekte von HTTP/1.1, CSS1 und PNG". World Wide Web Konsortium. Abgerufen 14. Januar 2010.
  5. ^ a b Willis, Nathan (18. November 2009). "Reduzierung der HTTP -Latenz mit SPDY". Lwn.net.
  6. ^ "Verbindungen". W3.org.
  7. ^ "HTTP/1.1 Pipelining FAQ '".
  8. ^ a b Mark Nottingham (14. März 2011). "HTTP -Pipelining im offenen Web verwendbar machen". Abgerufen 16. Oktober, 2021. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  9. ^ a b "Wayback -Link von 'Windows Internet Explorer 8 Expertenzonen -Chat (14. August 2008)' '". Microsoft. 14. August 2008. archiviert von das Original am 4. Dezember 2010. Abgerufen 10. Mai, 2012.
  10. ^ "Hypertext Transfer Protocol (HTTP/1.1): Nachrichtensyntax und Routing: Parallelität". ietf.org. Abgerufen 2014-07-24.
  11. ^ "Archivierte Kopie". Archiviert von das Original am 2016-04-24. Abgerufen 2016-04-16.{{}}: CS1 Wartung: Archiviertes Kopie als Titel (Link)
  12. ^ "Internet Explorer- und Verbindungsgrenzen". Ieblog. Abgerufen 2016-11-14.
  13. ^ Pipelining -Netzwerk Mozillazin
  14. ^ Cheah Chu Yeow (2005). Firefox Secrets. p.180. ISBN 0-9752402-4-2.
  15. ^ "Fehler 264354: Aktivieren Sie standardmäßig HTTP -Pipelining". Mozilla. Abgerufen 16. September, 2011.
  16. ^ "Quellcode - nshttpConnection.cpp". Firefox -Quellcode. Mozilla. 7. Mai 2010. Abgerufen 5. Dezember, 2010.
  17. ^ "Bug 1340655: H1 -Pipeline -Unterstützung entfernen". Mozilla. Abgerufen 22. März, 2017.
  18. ^ Emir Arian. Internetkommunikation: Protokolle und verwandte Themen. Abgerufen 2021-10-16.
  19. ^ HTTP -Pipelining - Die Chromprojekte
  20. ^ "HTTP/1 Pipelining -Unterstützung wurde in Firefox 54 - Pale Moon Forum entfernt". Forum.Palemoon.org. Abgerufen 2018-06-07.
  21. ^ Mark Nottingham (20. Juni 2007). "Der Zustand des Stellvertreters" Caching ". Abgerufen 16. Mai, 2009.
  22. ^ Mark Nottingham (11. Juli 2011). "Was Proxies müssen tun". Abgerufen 16. Oktober, 2021.
  23. ^ "Squid: Pipeline_Prefetch -Konfigurationsrichtlinie". Tintenfisch. 9. November 2009. Abgerufen 1. Dezember, 2009.
  24. ^ "Polipo - ein Caching -Web -Proxy". Juliusz Chroboczek. 18. September 2009. Abgerufen 12. November, 2009.
  25. ^ "Tempesta FW - Ein Linux -Anwendungs ​​-Zustellung Controller". Github. Abgerufen 29. März, 2018.
  26. ^ "Server: Tempestas Seite - Tempesta -Tech/Tempesta Wiki". Tempesta Technologies Inc. 1. August 2017. Abgerufen 29. März, 2018.
  27. ^ Kahan, José (7. Juni 2002). "Veränderung der Geschichte von libwww". World Wide Web Konsortium. Abgerufen 3. August, 2010.
  28. ^ "Verwenden Sie http :: async für parallel http requests (colin bradford)" (PDF). Archiviert von das Original (PDF) Am 2012-03-10. Abgerufen 2010-08-03.
  29. ^ System.net.httpwebRequest & Pipelining
  30. ^ QnetworkRequest Class Referenz Archiviert 2009-12-22 bei der Wayback -Maschine, Nokia QT -Dokumentation
  31. ^ Pipelined HTTP Get Utility
  32. ^ Curl Pipelining Erklärung Archiviert 2012-06-27 bei der Wayback -Maschine, Curl Developer -Dokumentation
  33. ^ Curl Pipelining -Entfernung AnkündigungArchiviert 2021-02-05 am Wayback -Maschine
  34. ^ C. Michael Pilato; Ben Collins-Sussman; Brian W. Fitzpatrick (2008). Versionskontrolle mit Subversion. O'Reilly Media. p. 238. ISBN 978-0-596-51033-6.
  35. ^ Justin R. Erenkrantz (2007). "Subversion: Mächtige neue Spielzeuge" (PDF).
  36. ^ "HTTP/HTTPS -Nachrichten". Microsoft Technet. 21. Januar 2005.
  37. ^ Wie CICS Web Support Pipelining behandelt
  38. ^ "HTTP -Website". Archiviert von das Original Am 2012-06-08. Abgerufen 2010-10-01.

Externe Links