SPDY: Unterschied zwischen den Versionen

Aus Foxwiki
Leere Seite erstellt
 
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{| class="wikitable float-right"
|-
! colspan="2" style="background-color: #C0C0FF; font-size: larger"| SPDY
|-
! Familie:
| ähnlich HTTP in der<br />[[Internetprotokollfamilie]],<br />aber experimentell
|-
! Einsatzgebiet:
| Datenpaketversendung<br />sowohl lokal als auch<br />weltweit über verschiedene<br />Netzwerke
|-
| align="center" colspan="2" |
{{Netzwerk-TCP-IP-Anwendungsprotokoll|SPDY|ssl=1}}
|-
! Standards:
| n.&nbsp;n.
|}


'''SPDY''' [{{IPA|ˈspiːdi}}] (von {{enS|''speedy''}} ‚flott‘, ‚flink‘ oder ‚schnell‘) ist ein veraltetes experimentelles [[Transmission Control Protocol|TCP]]-basiertes [[Netzwerkprotokoll]], das vom Unternehmen [[Google Inc.|Google]] entwickelt wurde. SPDY ergänzt hierzu das [[Hypertext Transfer Protocol|HTTP]]-Protokoll. Der im Mai 2015 veröffentlichte [[HTTP/2]]-Standard fußt in weiten Teilen auf SPDY. Nachdem HTTP/2 als Standard ratifiziert wurde, haben wichtige Hersteller, darunter Google, Mozilla und Apple, SPDY zu Gunsten von HTTP/2 eingestellt. Im Jahr 2021 unterstützt kein moderner Browser mehr SPDY. Der neuere [[HTTP/3]]-Standard basiert wiederum auf [[QUIC]], welches ebenfalls ursprünglich von Google entwickelt wurde.
== Funktionsweise ==
Jede SPDY-Übertragung wird mittels [[Transport Layer Security|TLS]] verschlüsselt. Einen rund doppelt so schnellen Seitenaufbau erreicht SPDY laut Google vor allem durch das [[Multiplexverfahren|Multiplexen]] der Übertragungen. Dadurch können über eine einzelne TCP-Verbindung beliebig viele Dokumente parallel übertragen werden.<ref>http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Data-flow</ref> Hier bietet SPDY die Möglichkeit, die einzelnen Anfragen zu priorisieren, um einen [[Deadlock (Informatik)|Deadlock]] zu vermeiden oder wichtige Dokumente schneller zu bekommen.<ref>http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2#TOC-SYN_STREAM 3 Bit Prioritäten</ref>
Außerdem kann bei SPDY der [[Server]] selbst Übertragungen initiieren und Inhalte direkt und ohne Anfrage an den [[Client]] senden (Server push<ref name=google>http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2#TOC-Server-Push-Transactions</ref>). Damit verbunden können u.&nbsp;a. die Ladezeiten von weiteren Seitenaufrufen verringert werden und eine bessere [[Nutzung (Technik)|Auslastung]] des Netzwerks erreicht werden, da sinnlose Abfragen auf Verdacht entfallen.<ref name=google />
== Implementierung ==
=== Clientseitig ===
[[Google Chrome]] war der erste [[Webbrowser]] mit SPDY-Unterstützung. [[Mozilla Firefox]] unterstützt SPDY ab Version&nbsp;11;<ref>[http://www.admin-magazin.de/News/Firefox-11-implementiert-SPDY-Protokoll Firefox 11 implementiert SPDY-Protokoll] – Artikel vom 14. März 2012.</ref> ab Version&nbsp;13 ist es standardmäßig aktiviert.<ref>[https://bugzilla.mozilla.org/show_bug.cgi?id=724563 network.http.spdy.enabled true] – Link zu Bugzilla,  abgerufen am 22. April 2012.</ref> [[Opera (Browser)|Opera]] unterstützt SPDY seit Version&nbsp;12.10.<ref>[http://dev.opera.com/blog/opera-12-10-is-out/ Opera 12.10 is out] – Opera Developer News.</ref> SPDY wird von etwa drei Prozent aller Websites unterstützt.<ref>[http://w3techs.com/technologies/details/ce-spdy/all/all Usage of SPDY for websites] – W3Techs.</ref> Ab Version&nbsp;11 und Windows&nbsp;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''.<ref>https://bugzilla.mozilla.org/show_bug.cgi?id=736882#c1</ref>
''TLS False Start'' wurde in Google Chrome ab Version&nbsp;20 (2012) deaktiviert; eine Ausnahme bilden Webseiten, die die '''Next Protocol Negotiation''' ('''NPN''') unterstützen.<ref>{{cite web |author=Adam Langley |title=False Start’s Failure |date=2012-04-11 |url=https://www.imperialviolet.org/2012/04/11/falsestart.html |work=ImperialViolet.org |language=en |accessdate=2013-09-25}}</ref>
Im Februar 2015 kündigte Google an, dass nach der Ratifizierung des HTTP/2-Standards die Unterstützung für SPDY entfernt werde.<ref>{{cite web |author=Chris Bentzel, Bence Béky |date=2015-02-09 |title=Hello HTTP/2, Goodbye SPDY |url=https://blog.chromium.org/2015/02/hello-http2-goodbye-spdy.html |work=blog.chromium.org |language=en |accessdate=}}</ref>
Am 15.&nbsp;Mai 2015 wurde HTTP/2 offiziell als RFC 7540 veröffentlicht.
Mozilla entfernte die Unterstützung in Firefox&nbsp;50.<ref>{{cite web|title=1287132 - Disable SPDY 3.1|url=https://bugzilla.mozilla.org/show_bug.cgi?id=1287132|website=bugzilla.mozilla.org}}</ref>
Apple entfernte die Unterstützung in [[macOS]]&nbsp;10.14.4 und [[iOS (Betriebssystem)|iOS]]&nbsp;12.2.<ref>{{cite web |author=Scott Marshall |date=2019-01-25 |title=Removing Legacy SPDY Protocol Support |url=https://webkit.org/blog/8569/removing-legacy-spdy-protocol-support/ |accessdate=2019-03-07 |website=WebKit |language=en}}</ref>
=== Serverseitig ===
Für den [[Apache HTTP Server]] konnte 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. [[nginx]] unterstützt SPDY 3.1 ab der Version 1.6,<ref>Owen Garrett: [http://nginx.com/blog/nginx-1-6-1-7-released/ ''NGINX 1.6 and 1.7 released''], NGINX, Inc., 24. April 2014.</ref> ältere Versionen (vor 1.5.10) unterstützen auch das veraltete SPDY/2.
== Protokollunterstützung ==
Für die Nutzung innerhalb von [[HTTPS]] benötigt SPDY die [[Transport Layer Security|TLS]]-Erweiterung '''Next Protocol Negotiation''', kurz '''NPN'''.<ref>[//tools.ietf.org/agenda/82/slides/tls-3.pdf NPN protocol and explanation about its need to tunnel SPDY over HTTPS].</ref> 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.<ref>[http://www.openssl.org/news/changelog.html Openssl 1.0.1 changelog].</ref>
Es existieren auch Anpassungen für [[Network Security Services|NSS]] und TLSLite, die die Unterstützung von NPN ermöglichen.<ref>{{Webarchiv|url=https://technotes.googlecode.com/git/nextprotoneg.html |wayback=20120730004302 |text=''TLS Next Protocol Negotiation. Section: Implementations''}}.</ref>
== Protokollversionen ==
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.<ref name="Draft2">[http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2 SPDY Protocol – Draft 2]: “Currently, the only valid string is ‘spdy/2’ (spdy/1 isn’t implemented anywhere anymore)”.</ref>
* Version 2: Einstellung geplant. [[Nginx]] unterstützt SPDY/2 in Versionen vor 1.5.10.<ref>{{cite web|url=http://nginx.org/en/docs/http/ngx_http_spdy_module.html |title=Module ngx_http_spdy_module |publisher=Nginx.org |date= |accessdate=2014-06-03}}</ref> Ab Firefox 28 und in neueren Versionen von Google Chrome wurde die Unterstützung bereits eingestellt.<ref>{{cite web|url=https://code.google.com/p/chromium/issues/detail?id=303957 |title=Issue 303957 – chromium – Make Chrome support only SPDY/3 and above – An open-source project to help move the web forward. – Google Project Hosting |publisher=Code.google.com |date=2013-10-03 |accessdate=2014-02-19}}</ref> Der Webserver [[LiteSpeed Technologies Inc.|OpenLiteSpeed]] unterstützt SPDY/2 (neben SPDY/3) ab der Version 1.1.<ref name="litespeedtech1">[http://blog.litespeedtech.com/2013/06/20/openlitespeed-1-1-with-spdy/ OpenLiteSpeed 1.1 (With SPDY!)] abgerufen am 12. August 2013.</ref>
* Version 3: SPDY/3 erweitert das Protokoll um Flusskontrolle 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, der Internet Explorer ab Version 11.
* Version 3.1: SPDY v3.1 führt die Flusskontrolle für die Sitzungsschicht ein und entfernt den CREDENTIALS-Übertragungsrahmen (und damit verbundene Fehler).<ref>{{cite web|title=SPDY Protocol – Draft 3.1|url=http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1|accessdate=17. November 2013}}</ref> Firefox unterstützt die Version 3.1 des Protokolls ab der Version 27 und der OpenLiteSpeed-Server ab der Version 1.2.7.<ref name="litespeedtech2">[http://blog.litespeedtech.com/2013/11/26/openlitespeed-1st-web-server-to-support-spdy3-1/ OpenLiteSpeed 1st Web Server to Support SPDY/3.1!] abgerufen 10. Januar 2014.</ref> Mit Version 1.5.10 unterstützt auch Nginx die Protokollversion SPDY/3.1.<ref>[http://nginx.com/news/nginx-announces-support-spdy31/ NGINX Announces Support for SPDY/3.1] abgerufen am 4. Februar 2014.</ref>
* Version 4.0: SPDY v4 alpha3 führt das Protokoll näher mit dem HTTP/2-Entwurf zusammen; es besitzt eine neue Flusskontrolle für Datenströme (Streaming) und die Fehlercodes wurden denen von HTTP/2 angeglichen.<ref>{{cite web|title=Upcoming SPDY/4 changes to bring it more in sync with the HTTP/2 draft|url=https://groups.google.com/d/topic/spdy-dev/EWEEWSYtlhc/discussion|accessdate=27. Februar 2014}}</ref>
== Kritik ==
Die Semantik des Server-Push widerspricht laut Microsoft der von HTTP.<ref>[https://www.heise.de/developer/meldung/Microsoft-bringt-eigenen-Vorschlag-fuer-HTTP-2-1479694.html Microsoft bringt eigenen Vorschlag zu HTTP 2.0] heise.de</ref>
Durch die verpflichtende Verschlüsselung werden viele (transparente) Proxys nicht mehr funktionieren. Auch ein Filtern der übertragenen Inhalte wird dadurch stark erschwert.
== Weblinks ==
* [http://dev.chromium.org/spdy/ SPDY-Projekt] (englisch)
* [http://dev.chromium.org/spdy/spdy-whitepaper SPDY-Whitepaper] (englisch)
* [http://nginx.org/en/docs/http/ngx_http_spdy_module.html nginx spdy] (englisch)
== Einzelnachweise ==
<references />
[[Kategorie:Google]]
[[Kategorie:Internet-Anwendungsprotokoll]]
[[Kategorie:Abkürzung]]

Version vom 23. April 2023, 13:03 Uhr

SPDY
Familie: ähnlich HTTP in der
Internetprotokollfamilie,
aber experimentell
Einsatzgebiet: Datenpaketversendung
sowohl lokal als auch
weltweit über verschiedene
Netzwerke

Vorlage:Netzwerk-TCP-IP-Anwendungsprotokoll

Standards: n. n.

SPDY [[[:Vorlage:IPA]]] (von ‚flott‘, ‚flink‘ oder ‚schnell‘) ist ein veraltetes experimentelles TCP-basiertes Netzwerkprotokoll, das vom Unternehmen Google entwickelt wurde. SPDY ergänzt hierzu das HTTP-Protokoll. Der im Mai 2015 veröffentlichte HTTP/2-Standard fußt in weiten Teilen auf SPDY. Nachdem HTTP/2 als Standard ratifiziert wurde, haben wichtige Hersteller, darunter Google, Mozilla und Apple, SPDY zu Gunsten von HTTP/2 eingestellt. Im Jahr 2021 unterstützt kein moderner Browser mehr SPDY. Der neuere HTTP/3-Standard basiert wiederum auf QUIC, welches ebenfalls ursprünglich von Google entwickelt wurde.

Funktionsweise

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

Implementierung

Clientseitig

Google Chrome war der erste Webbrowser mit SPDY-Unterstützung. Mozilla Firefox unterstützt SPDY ab Version 11;[4] ab Version 13 ist es standardmäßig aktiviert.[5] Opera unterstützt SPDY seit Version 12.10.[6] SPDY wird von etwa drei Prozent aller Websites unterstützt.[7] 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.[8]

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

Im Februar 2015 kündigte Google an, dass nach der Ratifizierung des HTTP/2-Standards die Unterstützung für SPDY entfernt werde.[10] Am 15. Mai 2015 wurde HTTP/2 offiziell als RFC 7540 veröffentlicht. Mozilla entfernte die Unterstützung in Firefox 50.[11] Apple entfernte die Unterstützung in macOS 10.14.4 und iOS 12.2.[12]

Serverseitig

Für den Apache HTTP Server konnte 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. 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

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]

Protokollversionen

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.[17]
  • Version 2: Einstellung geplant. Nginx unterstützt SPDY/2 in Versionen vor 1.5.10.[18] Ab Firefox 28 und in neueren Versionen von Google Chrome wurde die Unterstützung bereits eingestellt.[19] Der Webserver OpenLiteSpeed unterstützt SPDY/2 (neben SPDY/3) ab der Version 1.1.[20]
  • Version 3: SPDY/3 erweitert das Protokoll um Flusskontrolle 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, der Internet Explorer ab Version 11.
  • Version 3.1: SPDY v3.1 führt die Flusskontrolle für die Sitzungsschicht ein und entfernt den CREDENTIALS-Übertragungsrahmen (und damit verbundene Fehler).[21] Firefox unterstützt die Version 3.1 des Protokolls ab der Version 27 und der OpenLiteSpeed-Server ab der Version 1.2.7.[22] Mit Version 1.5.10 unterstützt auch Nginx die Protokollversion SPDY/3.1.[23]
  • Version 4.0: SPDY v4 alpha3 führt das Protokoll näher mit dem HTTP/2-Entwurf zusammen; es besitzt eine neue Flusskontrolle für Datenströme (Streaming) und die Fehlercodes wurden denen von HTTP/2 angeglichen.[24]

Kritik

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

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

Weblinks

Einzelnachweise