SPDY

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
SPDY
Familie: ähnlich HTTP in der
Internetprotokollfamilie,
aber experimentell
Einsatzgebiet: Datenpaketversendung
sowohl lokal als auch
weltweit über verschiedene
Netzwerke
SPDY im TCP/IP‑Protokollstapel:
Anwendung SPDY
Transport TCP
Internet IP (IPv4, IPv6)
Netzzugang Ethernet Token
Bus
Token
Ring
FDDI
Standards: n. n.

SPDY [ˈspiːdi] (von englisch speedy ‚flott‘, ‚flink‘ oder ‚schnell‘) ist ein experimentelles TCP-basiertes Netzwerkprotokoll, das vom Unternehmen Google entwickelt wurde. SPDY ergänzt hierzu das HTTP-Protokoll. Der im Mai 2015 verabschiedete HTTP/2-Standard fußt in weiten Teilen auf SPDY.

Funktionsweise[Bearbeiten]

Jede SPDY-Übertragung wird mittels TLS verschlüsselt. Einen rund doppelt so schnellen Seitenaufbau erreicht SPDY laut Google vor allem durch das Multiplexen der Übertragungen. Dadurch können über eine einzelne TCP-Verbindung beliebig viele Dokumente parallel übertragen werden.[1] Hier bietet SPDY die Möglichkeit, die einzelnen Anfragen zu priorisieren, um einen Deadlock zu vermeiden oder wichtige Dokumente schneller zu bekommen.[2]

Außerdem kann bei SPDY der Server selbst Übertragungen initiieren und Inhalte direkt und ohne Anfrage an den Client senden (Server push[3]). Damit verbunden können u. a. die Ladezeiten von weiteren Seitenaufrufen verringert werden und eine bessere Auslastung des Netzwerks erreicht werden, da sinnlose Abfragen auf Verdacht entfallen.[4]

Implementierung[Bearbeiten]

Clientseitig[Bearbeiten]

Google Chrome war der erste Webbrowser mit SPDY-Unterstützung. Mozilla Firefox unterstützt SPDY ab Version 11;[5] ab Version 13 ist es standardmäßig aktiviert.[6] Opera unterstützt SPDY seit Version 12.10.[7] SPDY wird von etwa 3 % aller Websites unterstützt.[8] Ab Version 11 und Windows 8.1 unterstützt auch Microsoft Internet Explorer SPDY.

Kommt SPDY auf Firefox-Webbrowsern zum Einsatz, steht im Antwort-Header der Eintrag „X-Firefox-Spdy“ mit einem Wert größer oder gleich 1.[9]

TLS False Start wurde in Google Chrome ab Version 20 (2012) deaktiviert; eine Ausnahme bilden Webseiten, die die Next Protocol Negotiation (NPN) unterstützen.[10]

Nach einer Ankündigung Googles vom 10. Februar 2015 werden NPN und SPDY ab 2016 vom Chrome-Browser nicht mehr unterstützt, da diese durch die Standards HTTP/2 sowie ALPN ersetzt werden, in denen SPDY aufgeht.[11]

Serverseitig[Bearbeiten]

Für den Apache HTTP Server kann SPDY-Unterstützung über das Modul mod spdy nachgerüstet werden. Dieses wurde von Google entwickelt und wurde der Apache Foundation im Jahr 2014 übergeben. Eine offizielle Unterstützung für die aktuelle Version 2.4.x (Stand: 18. Dezember 2014) ist nicht vorhanden.[12] nginx unterstützt SPDY 3.1 ab der Version 1.6[13], ältere Versionen (vor 1.5.10) unterstützen auch das veraltete SPDY/2.

Protokollunterstützung[Bearbeiten]

Für die Nutzung innerhalb von HTTPS benötigt SPDY die TLS-Erweiterung Next Protocol Negotiation, kurz NPN.[14] Aus diesem Grund ist die Unterstützung von SPDY in Browsern und Webservern von der verwendeten SSL-Library und deren Unterstützung von NPN abhängig.

NPN wird von OpenSSL ab Version 1.0.1 unterstützt.[15] Es existieren auch Anpassungen für NSS und TLSLite, die die Unterstützung von NPN ermöglichen.[16]

Es ist geplant die NPN-Unterstützung zugunsten von Application-Layer Protocol Negotiation (ALPN) aufzugeben, da dieses auch von HTTP.2.0 verwendet wird.[17]

Das Security Support Provider Interface (SSPI), Microsofts TLS-Implementierung, unterstützt NPN nicht. Daher ist SPDY in aktuellen .NET Implementierungen nicht oder nur über Drittanbieter-Schnittstellen verfügbar.

Protokollversionen[Bearbeiten]

SPDY ist ein versioniertes Protokoll. Es besitzt 15 Steuerbits (innerhalb des Control Frames), die die Version des Sitzungsprotokolls definieren.

  • Version 1: diese Version wird nicht mehr verwendet.[18]
  • Version 2: Einstellung geplant. Nginx unterstützt SPDY/2 in Versionen vor 1.5.10.[19] Ab Firefox 28 und in neueren Versionen von Google Chrome wurde die Unterstützung bereits eingestellt.[20] Der Webserver OpenLiteSpeed unterstützt SPDY/2 (neben SPDY/3) ab der Version 1.1.[21]
  • Version 3: SPDY/3 erweitert das Protokoll um Flußkontrolle und ein aktualisierte Kompression (dictionary). Außerdem wurde die Größe spezifischer Übertragungsrahmen optimiert und Fehler behoben. Firefox unterstützt SPDY/3 ab Version 15.
  • Version 3.1: SPDY v3.1 führt die Flußkontrolle für die Sitzungsschicht ein und entfernt den CREDENTIALS-Übertragungsrahmen (und damit verbundene Fehler).[22] Firefox unterstützt die Version 3.1 des Protokolls ab der Version 27 und der OpenLiteSpeed-Server ab der Version 1.2.7.[23] Mit Version 1.5.10 unterstützt auch Nginx die Protokollversion SPDY/3.1.[24]
  • Version 4.0: SPDY v4 alpha3 führt das Protokoll näher mit dem HTTP/2-Entwurf zusammen; es besitzt eine neue Flußkontrolle für Datenströme (Streaming) und die Fehlercodes wurden denen von HTTP/2 angeglichen.[25]

Kritik[Bearbeiten]

Die Semantik des Server-Push widerspricht laut Microsoft der von HTTP.[26]

Durch die verpflichtende Verschlüsselung werden viele (transparente) Proxys nicht mehr funktionieren. Auch ein Filtern der übertragenen Inhalte wird dadurch stark erschwert.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. [1]
  2. 3 Bit Prioritäten
  3. [2]
  4. [3]
  5. Firefox 11 implementiert SPDY-Protokoll – Artikel vom 14. März 2012.
  6. network.http.spdy.enabled true – Link zu Bugzilla aufgerufen am 22. April 2012.
  7. Opera 12.10 is out – Opera Developer News.
  8. Usage of SPDY for websites – W3Techs.
  9. [4]
  10. Adam Langley: False Start’s Failure (11. April 2012). Abgerufen am 25. September 2013.
  11. SPDY soll in Chrome schnell durch HTTP/2 ersetzt werden. Abgerufen am 10. Februar 2015.
  12. [5]
  13. Owen Garrett: NGINX 1.6 and 1.7 released, NGINX, Inc., 24. April 2014.
  14. NPN protocol and explanation about its need to tunnel SPDY over HTTPS.
  15. Openssl 1.0.1 changelog.
  16. TLS Next Protocol Negotiation. Section: Implementations.
  17. Adam Langley: ImperialViolet. Abgerufen am 11. Februar 2015.
  18. SPDY Protocol – Draft 2: “Currently, the only valid string is ‘spdy/2’ (spdy/1 isn’t implemented anywhere anymore)”.
  19. Module ngx_http_spdy_module. Nginx.org. Abgerufen am 3. Juni 2014.
  20. Issue 303957 – chromium – Make Chrome support only SPDY/3 and above – An open-source project to help move the web forward. – Google Project Hosting. Code.google.com. 3. Oktober 2013. Abgerufen am 19. Februar 2014.
  21. OpenLiteSpeed 1.1 (With SPDY!) abgerufen am 12. August 2013.
  22. SPDY Protocol – Draft 3.1. Abgerufen am 17. November 2013.
  23. OpenLiteSpeed 1st Web Server to Support SPDY/3.1! abgerufen 10. Januar 2014.
  24. NGINX Announces Support for SPDY/3.1 abgerufen am 4. Februar 2014.
  25. Upcoming SPDY/4 changes to bring it more in sync with the HTTP/2 draft. Abgerufen am 27. Februar 2014.
  26. Microsofts Vorschlag zu HTTP 2.0