<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=WebSocket</id>
	<title>WebSocket - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=WebSocket"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=WebSocket&amp;action=history"/>
	<updated>2026-05-19T21:52:46Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=WebSocket&amp;diff=1828419&amp;oldid=prev</id>
		<title>imported&gt;FrischesBrot: Google Chrome setzt nicht mehr auf WebKit, sondern Blink</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=WebSocket&amp;diff=1828419&amp;oldid=prev"/>
		<updated>2026-04-19T20:18:40Z</updated>

		<summary type="html">&lt;p&gt;Google Chrome setzt nicht mehr auf WebKit, sondern Blink&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| class=&amp;quot;wikitable float-right&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;background:#C0C0FF; font-size:larger;&amp;quot;| WebSocket-Protokoll&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Familie:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [[Internetprotokollfamilie]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einsatzgebiet:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| bidirektionale Verbindung zwischen&amp;lt;br /&amp;gt; einer Webanwendung und einem WebSocket-Server&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Port:&amp;#039;&amp;#039;&amp;#039; || 80/TCP, 443/TCP&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; class=&amp;quot;center&amp;quot;|&lt;br /&gt;
{{Netzwerk-TCP-IP-Anwendungsprotokoll|WebSocket}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Standards:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;RFC&amp;amp;nbsp;6455&amp;lt;/nowiki&amp;gt;&amp;lt;ref&amp;gt;{{RFC-Internet |RFC=6455 |Titel=The WebSocket Protocol Version 13 |Datum=2011}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;WebSocket-Protokoll&amp;#039;&amp;#039;&amp;#039; ist ein auf [[Transmission Control Protocol|TCP]] basierendes [[Netzwerkprotokoll]], das entworfen wurde, um eine [[bidirektional]]e Verbindung zwischen einem [[Webbrowser]] und einem WebSocket-Server bzw. einem [[Webserver]], der auch WebSockets unterstützt, herzustellen.&lt;br /&gt;
&lt;br /&gt;
== Vorteile gegenüber reinem HTTP ==&lt;br /&gt;
Während bei einer reinen [[Hypertext Transfer Protocol|HTTP]]-Verbindung jede Aktion des Servers eine vorhergehende Anfrage des Clients erfordert, reicht es beim WebSocket-Protokoll, wenn der Client die Verbindung öffnet. Der Server kann dann diese offene Verbindung aktiv verwenden und neue Informationen an den Client ausliefern, ohne auf eine neue Verbindung des Clients zu warten. Eine vom Server initiierte Übertragung ist bei einer reinen HTTP-Verbindung nur durch verzögertes Antworten auf eine vom Client initiierte Anfrage möglich ([[Long Polling]]). Seit HTTP/2 kann der Server auch Push-Meldungen absetzen.&lt;br /&gt;
Zudem entfallen bei WebSockets die durch den HTTP-Header verursachten zusätzlichen Daten, die bei jeder Anfrage einige hundert Bytes umfassen können.&lt;br /&gt;
Technisch betrachtet startet bei WebSocket, wie bei HTTP, der Client eine Anfrage, mit dem Unterschied, dass nach der Übertragung der Daten zum Verbindungsaufbau die zugrundeliegende [[Transmission Control Protocol|TCP]]-Verbindung bestehen bleibt und asynchrone Übertragungen in beide Richtungen ermöglicht.&lt;br /&gt;
&lt;br /&gt;
== URI-Schema ==&lt;br /&gt;
Die WebSocket-Protokoll-Spezifikation definiert zwei neue [[Uniform Resource Identifier|URI]]-Schemata, &amp;#039;&amp;#039;ws:&amp;#039;&amp;#039; für unverschlüsselte, und &amp;#039;&amp;#039;wss:&amp;#039;&amp;#039; für verschlüsselte Verbindungen.&lt;br /&gt;
&lt;br /&gt;
== Der WebSocket-Protokoll-Handshake ==&lt;br /&gt;
Zu Beginn jeder Verbindung führen Server und Client einen sogenannten Handshake durch. Dieser ähnelt dem HTTP-Header und ist vollständig abwärtskompatibel zu diesem, was die Nutzung des Standard-HTTP-Ports „80“ zugleich für normale HTTP-Kommunikation als auch für die Websocket-Nutzung ermöglicht. Der Handshake beinhaltet außerdem weitere Informationen (z.&amp;amp;nbsp;B. die verwendete Protokollversion).&lt;br /&gt;
&lt;br /&gt;
=== Anfrage des Clients ===&lt;br /&gt;
Im Folgenden ist ein Beispielhandshake des siebzehnten Protokollentwurfs (&amp;#039;&amp;#039;draft-ietf-hybi-thewebsocketprotocol-17&amp;#039;&amp;#039;) dargestellt und erläutert:&amp;lt;ref&amp;gt;Der vorliegende Beispielhandshake entstammt der [https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17 siebzehnten Version des &amp;#039;&amp;#039;WebSocket Protocol Draft der IETF&amp;#039;&amp;#039;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Ältere Protokollentwürfe können sehr stark von dieser Version des Protokolls abweichen, da es aufgrund von Sicherheitsbedenken umgestaltet wurde. Dies betrifft insbesondere die Entwürfe vor &amp;#039;&amp;#039;draft-ietf-hybi-thewebsocketprotocol-04&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 GET /chat HTTP/1.1&lt;br /&gt;
 Host: server.example.com&lt;br /&gt;
 Upgrade: websocket&lt;br /&gt;
 Connection: Upgrade&lt;br /&gt;
 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==&lt;br /&gt;
 Origin: http://example.com&lt;br /&gt;
 Sec-WebSocket-Protocol: chat, superchat&lt;br /&gt;
 Sec-WebSocket-Version: 13&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie auch im [[Hypertext Transfer Protocol|HTTP]] gibt der Client an, auf welche Ressource (hier: &amp;#039;&amp;#039;/chat&amp;#039;&amp;#039;) und auf welchen Host (hier: &amp;#039;&amp;#039;server.example.com&amp;#039;&amp;#039;) er zugreifen möchte. Außerdem fordert der Client ein Upgrade auf das Websocket-Protokoll. Der zufällig generierte „Sec-WebSocket-Key“ dient zur Überprüfung, ob der Server die Anfrage tatsächlich gelesen und verstanden hat (&amp;#039;&amp;#039;siehe Abschnitt [[#Antwort des Servers|Antwort des Servers]]&amp;#039;&amp;#039;). Unter „Sec-WebSocket-Protocol“ hat der Client die Möglichkeit, auf das Websocket-Protokoll aufbauende Protokolle anzugeben, die die Clientanwendung unterstützt (hier: ein Chat-Protokoll). Selbsterklärend sollte unter „Sec-WebSocket-Version“ die verwendete Protokollversion angegeben werden.&lt;br /&gt;
&lt;br /&gt;
=== Antwort des Servers ===&lt;br /&gt;
Auf die obige Beispielanfrage könnte ein Websocket-Server beispielsweise wie folgt antworten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 HTTP/1.1 101 Switching Protocols&lt;br /&gt;
 Upgrade: websocket&lt;br /&gt;
 Connection: Upgrade&lt;br /&gt;
 Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=&lt;br /&gt;
 Sec-WebSocket-Protocol: chat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch den [[HTTP-Statuscode]] 101 und die folgenden zwei Zeilen erklärt der Server, dass er mit dem Wechsel des Protokolls einverstanden ist. Von diesem Zeitpunkt an verwenden beide ein binäres Protokoll, das nicht mehr HTTP-kompatibel ist. Es ist in Pakete aufgeteilt, die als Binär oder Text, als Ping oder Pong oder als Ende der Verbindung markiert sind und die Länge des Inhalts angeben.&amp;lt;ref&amp;gt;{{RFC-Internet |RFC=6455 |Titel=The WebSocket Protocol Version 13 |Datum=2011 |Abschnitt=5.2 |Abschnittstitel=Base Framing Protocoll}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der zurückgesendete Schlüssel unter „Sec-WebSocket-Accept“ dient der Verifikation, dass der Server die Anfrage des Clients gelesen hat. Er wird wie folgt erstellt: An den oben erwähnten, [[Base64]]-kodierten String, den der Client sendet („Sec-WebSocket-Key“) wird der [[Globally Unique Identifier]] &amp;lt;code&amp;gt;258EAFA5-E914-47DA-95CA-C5AB0DC85B11&amp;lt;/code&amp;gt; angehängt. Daraufhin wird ein [[Secure Hash Algorithm|SHA1-Hash]] des entstandenen Schlüssels erstellt und Base64-kodiert. Anzumerken ist hierbei, dass der ursprünglich empfangene Schlüssel zwar Base64-kodiert ist, jedoch zu keinem Zeitpunkt dekodiert wird.&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel gibt der Server zusätzlich an, dass er das angeforderte Protokoll „chat“ kennt („Sec-WebSocket-Protocol“).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
WebSocket Client in [[JavaScript]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
var socket = new WebSocket(urlToWebsocketServer);&lt;br /&gt;
&lt;br /&gt;
// callback-Funktion wird gerufen, wenn die Verbindung erfolgreich aufgebaut werden konnte&lt;br /&gt;
socket.onopen = function () {&lt;br /&gt;
    console.log(&amp;quot;Verbindung wurde erfolgreich aufgebaut&amp;quot;);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// callback-Funktion wird gerufen, wenn eine neue Websocket-Nachricht eintrifft&lt;br /&gt;
socket.onmessage = function (messageEvent) {&lt;br /&gt;
    console.log(messageEvent.data);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// callback-Funktion wird gerufen, wenn ein Fehler auftritt&lt;br /&gt;
socket.onerror = function (errorEvent) {&lt;br /&gt;
    console.log(&amp;quot;Error! Die Verbindung wurde unerwartet geschlossen&amp;quot;);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
socket.onclose = function (closeEvent) {&lt;br /&gt;
    console.log(&amp;#039;Die Verbindung wurde geschlossen --- Code: &amp;#039; + closeEvent.code + &amp;#039; --- Grund: &amp;#039; + closeEvent.reason);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
Die Spezifikation erlaubt die Erweiterung des Websocket-Protokolls durch definierte „Extensions“. Diese werden zwischen Client und Server ausgehandelt.&lt;br /&gt;
Beispiele:&lt;br /&gt;
* [https://tools.ietf.org/html/draft-tyoshino-hybi-websocket-perframe-deflate-06 WebSocket Per-frame Compression]&lt;br /&gt;
* [https://tools.ietf.org/html/draft-tamplin-hybi-google-mux-03 A Multiplexing Extension for WebSockets]&lt;br /&gt;
* [https://tools.ietf.org/html/draft-hapner-hybi-messagebroker-subprotocol-01 The MessageBroker WebSocket Subprotocol]&lt;br /&gt;
&lt;br /&gt;
== Browser-Unterstützung ==&lt;br /&gt;
* Auf [[WebKit]] basierende Browser (z.&amp;amp;nbsp;B. [[Apple Safari]], [[Google Chrome]] bis Version 27)&lt;br /&gt;
* [[Google Chrome]], ab Version 28&lt;br /&gt;
* [[Opera (Browser)|Opera]], ab Version 10.70&lt;br /&gt;
* [[Microsoft Edge]], ab erster Version&lt;br /&gt;
* [[Mozilla Firefox]], ab Version 4&amp;lt;ref&amp;gt;{{Internetquelle |url=https://developer.mozilla.org/de/docs/Web/API/WebSockets_API |titel=The WebSocket API (WebSockets) |werk=developer.mozilla.org |sprache=en |abruf=2016-03-22}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Internet Explorer]], ab Version 10.0&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Peter Leo Gorski, Luigi Lo Iacono, Hoai Viet Nguyen: &amp;#039;&amp;#039;WebSockets – Moderne HTML5-Echtzeitanwendungen entwickeln&amp;#039;&amp;#039;, Hanser, München und Wien 2015, ISBN 978-3-446-44371-6&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{RFC-Internet |RFC=6455 |Titel=The WebSocket Protocol Version 13 |Datum=2011}}&lt;br /&gt;
* {{Internetquelle |url=https://websockets.spec.whatwg.org/ |titel=The WebSocket API |titelerg=– WHATWG Entwurf für die API-Spezifikation |sprache=en |abruf=2009-12-10 |abruf-verborgen=ja}}&lt;br /&gt;
* {{Internetquelle |autor=Matthias Wessendorf |url=https://www.heise.de/developer/artikel/WebSocket-Annaeherung-an-Echtzeit-im-Web-1260189.html |titel=WebSocket: Annäherung an Echtzeit im Web |werk=[[Heise online]] |abruf=2011-06-20 |abruf-verborgen=ja}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste W3C-Standards}}&lt;br /&gt;
&lt;br /&gt;
{{Normdaten |TYP=s |GND=1068348321}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:JavaScript-Programmierschnittstelle]]&lt;br /&gt;
[[Kategorie:Internet-Anwendungsprotokoll]]&lt;/div&gt;</summary>
		<author><name>imported&gt;FrischesBrot</name></author>
	</entry>
</feed>