Web Sockets

WebSocket (HTTP)

[116] WebSocket は、 Webサーバークライアントの間で双方向通信を行うためのプロトコルです。

仕様書

[96] クライアントの間のプロトコルは、 IETF が出版する RFC 6455 >>115 によって規定されています。

[97] Webブラウザー上の API は、 WHATWG が出版する HTML Standard >>131 によって規定されています。

[161] 両者の境界部分である、 URL から接続を確立する部分は、 WHATWGFetch Standard >>160 によって規定されています。

プロトコル

[138] WebSocketサーバーは、 TCPTLS over TCP の接続待ち状態で、WebSocketクライアントからの接続を待機します。 WebSocketクライアントは、適切なタイミング (WebSocketコンストラクターの実行や、それに相当する操作が行われたタイミング) で、 WebSocket接続の確立操作を行い、 WebSocketサーバーとの handshake によって実際の通信が行える状態となります。

[139] 以後、 WebSocketサーバーおよび WebSocketクライアントは、 適宜WebSocketメッセージ送信を行うことができます。 また必要に応じてPingフレームPongフレームを送ることができます。 それと同時に WebSocketメッセージ受信処理により、相手側からのフレームを処理します。

[140] WebSocketサーバーおよびWebSocketクライアントは、 適当なタイミングで Closeフレームを送信し、 closing handshake を行うことができます。また handshake や送受信の途中で問題が発生すると、WebSocket接続を閉じることになります。 いずれにせよ、所定の手続きで WebSocket接続を閉じ、下位の TCP接続 (や TLS) も閉じ、 WebSocket オブジェクトも破棄することとなります。

[141] プロトコルの詳細や API は、次の各項を参照してください。

[121] WebSocket Protocol がデータを送信 (send) する時、 実際にはデータをバッファリングするなどして遅延させても構いません >>120

[124] TLS を実装しなければなりません >>123。 通信時に TLS を使うべきです >>123強いTLSアルゴリズムのみ使うべきです >>123

[151] 実際には TLS を実装しないサーバーも存在しています。また Webブラウザー以外のクライアントには、 TLS を実装しないものもあるかもしれません。 しかし現在では TLS を使わない平文の通信は安全でなく、 避けるべきであると考えられています。

URL

[98] TLS の有無により、次の2つの URL scheme が定義されています。

WebSocket インターフェイス

[132] WebSocket インターフェイスは、 WebSocket接続に関する機能を提供するWebSocketクライアント API です。

[133] WebSocket インターフェイスは、 文書環境ワーカー環境晒されています >>131

[134] WebSocket インターフェイスは、 EventTarget インターフェイス継承しています >>131

[135] 次のメンバーがあります。

[137] WebSocket オブジェクトは、 WebSocket接続を表しています。 WebSocket オブジェクトが持つ状態は、 WebSocket接続を参照。

HTTP との関係

[94] 元々 WHATWG で開発されていた頃は、 HTTP からの切り替えにも対応している、 HTTP とは別のプロトコルという位置付けでした。

[95] しかし IETFプロトコルに変更が加えられた結果、 HTTP の動作モードのような形となっています。 (Web Sockets から HTTP への切り替えができないのは変わっていません。)

[118] 公式には、 WebSocket は独立した TCP 上のプロトコル >>117 とされています。しかし WebSocket handshake は、完全に HTTP要求HTTP応答のやり取りであるとされています。少なくても接続の確立に必要な程度には、 サーバークライアントHTTP を実装しなければなりません。 クライアントはエラーその他の WebSocket 以外の HTTP応答も受信できる必要があります。

[152] Webブラウザーは新しい接続WebSocket接続の確立を開始しますし、 RFC の規定する WebSocket接続の確立の手続きに従うと、必ず新しい接続を使って WebSocket が開始されることになります。しかし HTTP の仕様上は、 持続的接続の途中から WebSocket を開始することもできなくはありません。 WebSocket プロトコル側はこれに特に言及しておらず、サーバーがどう扱うべきかは定かではありません。

[119] 以前は独立したプロトコルとして NPN の識別子が規定されていましたが、 IETF に移管されてから ALPN の識別子は割り当てられていないようです。

[126] HTTP Upgrade: の値 WebSocket は、 WebSocket Protocol を表します >>125。 その他WebSocket接続の確立で使われる各ヘッダーは、 HTTPヘッダーとして IANA登録簿に登録されています。

[146] Webブラウザーでは、 HTTP とは性質がかなり違いますから、 仕様書上は Fetch とは別に扱われていました。しかし実装は共通化されていたようですし、 仕様書上も様々な共通の新機能が追加されたことから、 Fetch に統合されました。

[148] Upgrade: を使うことおよび WebSocket handshake の仕様から、 HTTP/1.1 でしか使えません。 HTTP/0.9HTTP/1.0HTTP/2 とは併用できません。

HTTP/2 との関係

[169] WebSocketHTTP/2 で使うことはできません。

[153] ALPN がありますから、 HTTP/2WebSocket の両方に対応したサーバークライアントは、 WebSocket を使うときだけ HTTP/1.1 を選択し、それ以外は HTTP/2 を選択するように自動的に折衝できます。

[170] WebSocketHTTP/2 に移植するよりは、 Fetch API を拡張して HTTP/2 で直接 WS 相当の機能を実現する方式が有望と見られています。

Socket API との関係

[112] WebSocket という名前は Socket API から派生したものですが、 APIプロトコルも互換性はまったくありません。

[113] Web ではセキュリティー上の理由から生の TCPUDP へのアクセスは提供されていません。 それにかわるものとして WebSocket が開発されました。

利用例

[167] WebSocket を使ったサーバーの実例:

[168] WebSocket下位層に使ったプロトコルの例:

関連

[147] fetchService Worker を経由しますが、 WebSocket は現在そのようなことはないようです。

歴史

WHATWG

[142] WebSocketIan Hickson により WHATWG HTML5 (現 HTML Standard) の機能として開発されました。

[143] 後に APIW3C WebApps WGプロトコルIETF hybi WG でも同時出版されるようになりました。

[1] [whatwg] Web Sockets ( 版) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2008-July/015252.html> <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/14577>

[2] The Web Sockets API ( 版) <http://dev.w3.org/cvsweb/~checkout~/html5/websockets/Overview.html?content-type=text/html;%20charset=iso-8859-1>

[3] The Web Sockets API ( 版) <http://www.w3.org/TR/2009/WD-websockets-20090423/>

[4] Bug 27490 – Web Sockets Test Infrastructure Part 1/3: Server ( 版) <https://bugs.webkit.org/show_bug.cgi?id=27490>

[5] IRC logs: freenode / #whatwg / 20090807 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090807#l-499>

[6] IRC logs: freenode / #whatwg / 20090812 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090812>

[43] WebSocket feedback (Ian Hickson <ian@...> 著, 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/16588>

[44] InfoQ: HTML 5 Web Sockets vs. Comet and Ajax (alex[at]c4media[dot]com 著, 版) <http://www.infoq.com/jp/news/2008/12/websockets-vs-comet-ajax>

[45] Index of /specs/web-apps/current-work/.ietf-websocket-protocol ( 版) <http://www.whatwg.org/specs/web-apps/current-work/.ietf-websocket-protocol/>

[46] The Web Sockets API ( 版) <http://dev.w3.org/html5/websockets/>

[47] draft-hixie-thewebsocketprotocol - The Web Socket protocol <http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol>

[48] IRC logs: freenode / #whatwg / 20090603 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090603#l-515>

[49] [whatwg] New mailing list hybi at ietf.org for discussion of WebSocket (et al) ( 版) <http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-March/019090.html>

[50] [hybi] WebSockets ( 版) <http://www.ietf.org/mail-archive/web/hybi/current/msg00007.html>

[51] Re: [hybi] WebSockets feedback (Was: Bayeux / Jetty perspective.) ( 版) <http://www.ietf.org/mail-archive/web/hybi/current/msg00055.html>

[52] [hybi] WebSocket feedback ( 版) <http://www.ietf.org/mail-archive/web/hybi/current/msg00239.html>

[53] Re: [hybi] [Uri-review] ws: and wss: schemes ( 版) <http://www.ietf.org/mail-archive/web/hybi/current/msg00473.html>

[54] IRC logs: freenode / #whatwg / 20090603 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090603#l-554>

[55] (X)HTML5 Tracking ( 版) <http://html5.org/tools/web-apps-tracker?from=3724&to=3725>

[56] IRC logs: freenode / #whatwg / 20090713 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090713#l-538>

[57] IRC logs: freenode / #whatwg / 20090714 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090714#l-315>

[58] gimite's web-socket-js at master - GitHub ( 版) <http://github.com/gimite/web-socket-js>

[59] gimite's web-socket-ruby at master - GitHub ( 版) <http://github.com/gimite/web-socket-ruby>

[60] The Web Sockets API ( 版) <http://www.w3.org/TR/2009/WD-websockets-20091029/>

[61] <http://www.whatwg.org/specs/web-socket-protocol/>

[62] HTML5 Revision Tracker ( 版) <http://html5.org/tools/web-apps-tracker?from=4813&to=4814>

[63] WebSockets in Firefox ✩ Mozilla Hacks – the Web developer blog ( 版) <http://hacks.mozilla.org/2010/04/websockets-in-firefox/>

[64] Web Applications 1.0 r5173 Make WebSockets support subprotocol negotiation. ( 版) <https://html5.org/r/5173>

[7] The Web Sockets API ( 版) <http://www.w3.org/TR/2009/WD-websockets-20091222/>

[8] typester's anyevent-websocket-demo at master - GitHub ( 版) <http://github.com/typester/anyevent-websocket-demo>

[9] IRC logs: freenode / #whatwg / 20100215 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20100215#l-801>

[10] IRC logs: freenode / #whatwg / 20100503 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20100503#l-206>

[11] [hybi] draft-ietf-hybi-thewebsocketprotocol-00 ( 版) <http://www.ietf.org/mail-archive/web/hybi/current/msg02090.html>

[12] draft-ietf-hybi-websocket-requirements-00 - HyBi WebSocket Requirements and Features ( 版) <http://tools.ietf.org/html/draft-ietf-hybi-websocket-requirements-00>

[13] IRC logs: freenode / #whatwg / 20100621 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20100621#l-163>

[14] IRC logs: freenode / #whatwg / 20100707 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20100707>

[15] [whatwg] WebSockets feedback ( 版) <http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-July/027245.html>

[16] IRC logs: freenode / #whatwg / 20100725 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20100725>

[17] IRC logs: freenode / #whatwg / 20100806 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20100806>

IETF HyBi WG

[24] WHATWG で一旦安定したかに見えた WebSocket Protocol でしたが、 2010年9月には完全に IETF に移管され、 WHATWG HTML5 からは削除されました。

[144] これ以後 WebSocket ProtocolHTTP や他の RFC のスタイルに合わせる形でプロトコル、仕様書共に大きく改変されることになります。

[18] Web Applications 1.0 r5409 Transferred the Web Sockets Protocol to Ian Fette. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=5408&to=5409>

[19] draft-ietf-hybi-thewebsocketprotocol - The WebSocket protocol ( ( 版)) <http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol>

[20] IRC logs: freenode / #whatwg / 20100902 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20100902>

[21] IRC logs: freenode / #whatwg / 20100915 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20100915#l-420>

[22] Re: [hybi] Versioning is a anti-pattern ( ( 版)) <http://www.ietf.org/mail-archive/web/hybi/current/msg04029.html>

[23] Re: [hybi] I-D Action:draft-ietf-hybi-thewebsocketprotocol-01.txt ( ( 版)) <http://www.ietf.org/mail-archive/web/hybi/current/msg03944.html>

[65] IRC logs: freenode / #whatwg / 20100920 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20100920#l-529>

[66] WebSocket disabled in Firefox 4 ✩ Mozilla Hacks – the Web developer blog ( ( 版)) <http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/>

[67] [hybi] Experiment comparing Upgrade and CONNECT handshakes ( ( 版)) <http://www.ietf.org/mail-archive/web/hybi/current/msg04744.html>

[68] Disabling the WebSocket protocol — Anne’s Blog ( ( 版)) <http://annevankesteren.nl/2010/12/websocket-protocol-vulnerability>

[69] Web Applications 1.0 r5963 12102 ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=5962&to=5963>

[25] IRC logs: freenode / #whatwg / 20100923 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20100923>

[26] IRC logs: freenode / #whatwg / 20101005 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101005#l-406>

[27] IRC logs: freenode / #whatwg / 20101006 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101006>

[28] IRC logs: freenode / #whatwg / 20101010 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101010>

[29] Opera Desktop Team - Web Sockets enter the Opera House ( ( 版)) <http://my.opera.com/desktopteam/blog/2010/10/11/websockets>

[30] Opera Core Concerns - WebSockets in Opera ( ( 版)) <http://my.opera.com/core/blog/websockets>

[31] IRC logs: freenode / #whatwg / 20101012 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101012>

[32] Opera's WebSockets testsuite ( ( 版)) <http://testsuites.opera.com/websockets/>

[33] IRC logs: freenode / #whatwg / 20101018 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101018>

[34] IRC logs: freenode / #whatwg / 20101029 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101029>

[35] IRC logs: freenode / #whatwg / 20101209 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101209>

[36] IRC logs: freenode / #whatwg / 20110125 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20110125#l-536>

[37] IRC logs: freenode / #whatwg / 20110325 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20110325#l-171>

[38] The WebSocket API ( ( 版)) <http://www.w3.org/TR/2011/WD-websockets-20110419/>

[39] IRC logs: freenode / #whatwg / 20110516 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20110516>

[40] IRC logs: freenode / #whatwg / 20110520 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20110520>

[41] [whatwg] WebSockets API feedback ( ( 版)) <http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-May/031792.html>

[42] Web Applications 1.0 r6151 WebSockets: binary data (first draft) ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=6150&to=6151>

[71] 最初は HTTP みたいな複雑なことをせずとも簡単に実装できるのが売りだったのに、 こんなわけのわからぬことになってしまったんだ・・・。

[74] Web Applications 1.0 r6330 WebSocket: Disallow this controversial extension rather than require it. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=6329&to=6330>

[75] New tests submitted by Microsoft for WebApps specs ( (Adrian Bateman 著, 版)) <http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1406.html>

[76] The WebSocket API ( ( 版)) <http://www.w3.org/TR/2011/WD-websockets-20110929/>

[77] Web Applications 1.0 r6632 Revert the part of r5409 that removed the URL parsing algorithms, since it's no longer defined in the protocol spec. ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=6631&to=6632>

[78] IRC logs: freenode / #whatwg / 20111013 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20111013#l-240>

[79] IRC logs: freenode / #whatwg / 20111115 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20111115#l-987>

[80] [whatwg] WebSocket framing ( ( 版)) <http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-December/034132.html>

RFC 出版

[145] 2011年12月には、 WebSocket ProtocolRFC 6455 として出版されました。

[81] The WebSocket API ( ( 版)) <http://www.w3.org/TR/2011/CR-websockets-20111208/>

[82] Chromium Blog: Web Sockets Now Available In Google Chrome ( ( 版)) <http://blog.chromium.org/2009/12/web-sockets-now-available-in-google.html>

[83] RFC 6455 - The WebSocket Protocol ( ( 版)) <http://tools.ietf.org/html/rfc6455>

[84] | Xtranormal ( (Xtranormal 著, 版)) <http://www.xtranormal.com/watch/7991991/web-sockets-we-are-the-first>

[85] Scheme/Host/Port: RFC 6454 and RFC 6455 ( ( 版)) <http://www.schemehostport.com/2011/12/rfc-6454-and-rfc-6465.html>

[86] IRC logs: freenode / #whatwg / 20120327 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20120327#l-638>

[87] The WebSocket API ( ( 版)) <http://www.w3.org/TR/2012/WD-websockets-20120524/>

[88] The WebSocket API ( ( 版)) <http://www.w3.org/TR/2012/WD-websockets-20120809/>

[89] The WebSocket API ( ( 版)) <http://www.w3.org/TR/2012/CR-websockets-20120920/>

[90] Interview with Ian Hickson, HTML editor | HTML5 Doctor ( ( 版)) <http://html5doctor.com/interview-with-ian-hickson-html-editor/>

[91] websockets-mixed-content ( ( 版)) <http://nwilson.github.io/websockets-mixed-context/>

[92] websockets-mixed-content ( ( 版)) <http://nwilson.github.io/websockets-mixed-context/>

[93] Web Applications 1.0 r8232 Make sure WebSocket connections that can't honour the subprotocol don't get established (looks like this got broken in the protocol spec at some point) ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=8231&to=8232>

[99] RFC 7355 - Indicating WebSocket Protocol as a Transport in the Session Initiation Protocol (SIP) Common Log Format (CLF) ( ( 版)) <https://tools.ietf.org/html/rfc7355>

[100] RFC 7118 - The WebSocket Protocol as a Transport for the Session Initiation Protocol (SIP) ( ( 版)) <https://tools.ietf.org/html/rfc7118>

[101] iOSとHTML5とWebSocketと画面ロックと - Qiita ( ( 版)) <http://qiita.com/tomoyukilabs/items/3dd71b07778e0963ec67>

[103] >>102UCA over Web Sockets を紹介しています (が詳しい規定はありません)。

[104] RFC 7118 - The WebSocket Protocol as a Transport for the Session Initiation Protocol (SIP) ( ( 版)) <http://tools.ietf.org/html/rfc7118>

[105] RFC 7395 - An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket ( ( 版)) <https://tools.ietf.org/html/rfc7395>

[107] MIX: Stop throwing exceptions for WebSockets. · f2730ad · w3c/webappsec ( ( 版)) <https://github.com/w3c/webappsec/commit/f2730ad4e5125a574bc885883542e57da99cc6c3>

[108] RFC 7355 - Indicating WebSocket Protocol as a Transport in the Session Initiation Protocol (SIP) Common Log Format (CLF) ( ( 版)) <https://tools.ietf.org/html/rfc7355>

[109] [hybi] Informal survey: "Non Request-Response Communication over the Web, and What's Missing" ( 版) <http://www.ietf.org/mail-archive/web/hybi/current/msg10580.html>

[110] mod_proxy_wstunnel - Apache HTTP Server Version 2.4 ( 版) <http://httpd.apache.org/docs/current/en/mod/mod_proxy_wstunnel.html>

[111] Still looking for alternatives to CORS and WebSocket — Anne’s Blog ( 版) <https://annevankesteren.nl/2015/03/public-internet-proxy>

[114] WebSocket Layering over SPDY [public draft] - Google Docs ( 版) <https://docs.google.com/document/d/1zUEFzz7NCls3Yms8hXxY4wGXJ3EEvoZc3GihrqPQcM0/edit?pli=1>

[128] draft-hirano-httpbis-websocket-over-http2-01 - WebSocket over HTTP/2 ( 版) <http://tools.ietf.org/html/draft-hirano-httpbis-websocket-over-http2-01>

[129] draft-ietf-hybi-websocket-requirements-02 - HyBi WebSocket Requirements and Features ( 版) <https://tools.ietf.org/html/draft-ietf-hybi-websocket-requirements-02>

[130] draft-ibc-websocket-dns-srv-02 - DNS SRV Resource Records for the WebSocket Protocol ( 版) <https://tools.ietf.org/html/draft-ibc-websocket-dns-srv-02>

[149] Where to file RFC 6455 bugs? [Was: Re: CfC: Mixed Content to PR; deadline July 6th.] (Arthur Barstow 著, 版) <https://lists.w3.org/Archives/Public/public-webappsec/2015Jun/0061.html>

[150] w3c/websockets ( 版) <https://github.com/w3c/websockets/>

[154] PSA: Change the Latest Editor's Drafts of WebStorage, WebWorkers, WebMessaging, Server-Sent Events and WebSockets (Xiaoqian Wu 著, 版) <https://lists.w3.org/Archives/Public/public-webapps/2015OctDec/0099.html>

[155] The WebSocket API ( 版) <https://w3c.github.io/websockets/>

No one in the Web Platform Working Group is actively working on this specification. For the latest version of The WebSocket API use the WHATWG Living Standard.

[156] URLs are parsed and produce records · whatwg/html@30bc255 ( 版) <https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44>

[157] 28841 – Incorporate changes suggested by Mixed Content ( 版) <https://www.w3.org/Bugs/Public/show_bug.cgi?id=28841>

[158] Update WebSocket construction per mixed content by domenic · Pull Request #222 · whatwg/html ( 版) <https://github.com/whatwg/html/pull/222>

[159] WebSocket: upgrade-insecure-requests · Issue #180 · whatwg/html ( 版) <https://github.com/whatwg/html/issues/180>

Fetch Standard

[162] 2016年3月には、接続の確立に関する部分がプロトコルと API から分離されて Fetch Standard に統合されました。これによって Mixed ContentHSTS などとの関係も明確化されました。

Fetch Standard の歴史の項を参照。

メモ

WebSocket

[70] Web Sockets は、元々は Web のための Socket API とそれを支えるプロトコルとして WHATWG で開発されていましたが、 後にプロトコル部分が IETF に移管され、用途が不明瞭になりつつある仕様です。

[122] IETF に移った後、RFC 2119 助動詞の扱いが若干曖昧になったり、 変数を使ったり使わなかったり、冗長な説明を繰り返したり、 アルゴリズムの一部であるべきものが他の節で規定されたりなど、 仕様書としての品質は下がり気味のようです。

[136] Writing WebSocket servers - WebSockets | MDN ( 版) <https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_servers>

[163] Archive ( 版) <https://mailarchive.ietf.org/arch/msg/hybi/2OIyLSs5JjDfiFB_I_HGoSinsqc>

[164] Editorial: remove HSTS reference · whatwg/html@96be6c0 ( 版) <https://github.com/whatwg/html/commit/96be6c02315d677c48ac334a689a48cbd1929c95>

[165] 23992 – WebSocket: API to apply TCP backpressure ( 版) <https://www.w3.org/Bugs/Public/show_bug.cgi?id=23992>

[166] Update WebSocket to use Fetch's WebSocket alterations · whatwg/html@3dadbca ( 版) <https://github.com/whatwg/html/commit/3dadbcad063a10b586ef52dd4b427aa339048ee7>

[171] ストリーミング | Typetalk API | Nulab Developers ( ()) <https://developer.nulab-inc.com/ja/docs/typetalk/api/1/streaming>

Streaming API はリアルタイムにデータを取得するためのもので、利用するには WebSocket プロトコルを使う必要があります。

[172] The WebSocket constructor does not throw SecurityError on bad port anymore · Issue #2460 · whatwg/html () <https://github.com/whatwg/html/issues/2460>

[173] Qlik Engine API ‒ Qlik Sense () <http://help.qlik.com/en-US/sense-developer/3.2/Subsystems/EngineAPI/Content/introducing-engine-API.htm>

The Qlik Engine API is a WebSocket protocol that uses JSON to pass information between the Qlik Sense engine and the clients.

[174] Mattermost API Reference () <https://api.mattermost.com/#tag/WebSocket>

The Mattermost WebSocket can be authenticated by cookie or through an authentication challenge. If you're authenticating from a browser and have logged in with the Mattermost API, your authentication cookie should already be set, this is how the Mattermost webapp authenticates with the WebSocket.

To authenticate with an authentication challenge, first connect the WebSocket and then send the following JSON over the connection:

[175] 取引所APIドキュメント | Coincheck(コインチェック) () <https://coincheck.com/ja/documents/exchange/api>

WebSocket 接続先

wss://ws-api.coincheck.com/

Subscribe

メッセージの受信を開始するには、まずSubscribeを示すリクエストをサーバーに送信する必要があります。このリクエストはJSONエンコードされている必要があります。

[176] draft-hirano-httpbis-websocket-over-http2-01 - WebSocket over HTTP/2 () <https://tools.ietf.org/html/draft-hirano-httpbis-websocket-over-http2-01>

[177] Add a domintro block for WebSocket interface (sideshowbarker著, ) <https://github.com/whatwg/html/commit/4ea65dcbf267677191e4516644cafddf1fe1a015>

[178] Add a domintro block for WebSocket interface by sideshowbarker · Pull Request #3159 · whatwg/html () <https://github.com/whatwg/html/pull/3159>

[179] Editorial: less continue after returning (annevk著, ) <https://github.com/whatwg/html/commit/0d097af1acbeabe56a1b0d0c2e2f521eca4defa8>

[180] Editorial: less continue after returning by annevk · Pull Request #3385 · whatwg/html () <https://github.com/whatwg/html/pull/3385>

[181] draft-ietf-httpbis-h2-websockets-07 - Bootstrapping WebSockets with HTTP/2 () <https://tools.ietf.org/html/draft-ietf-httpbis-h2-websockets-07>

[182] CONNECT: consider using ALPN registry for the :protocol values. · Issue #471 · httpwg/http-extensions () <https://github.com/httpwg/http-extensions/issues/471>

[183] wg-materials/minutes.md at gh-pages · httpwg/wg-materials () <https://github.com/httpwg/wg-materials/blob/gh-pages/ietf101/minutes.md#bootstrapping-websockets>

[184] Bootstrapping WebSockets with HTTP/2 () <https://httpwg.org/http-extensions/draft-ietf-httpbis-h2-websockets.html>

[185] WebSockets over HTTP/2 - Chrome Platform Status () <https://www.chromestatus.com/feature/6251293127475200>

[186] Intent to Implement: WebSockets over HTTP/2 - Google グループ () <https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/TQN4jWHydTk>

[187] 801564 - Implement WebSockets over HTTP/2 - chromium - Monorail () <https://bugs.chromium.org/p/chromium/issues/detail?id=801564>

[188] 684681 - Plaintext websockets does not work via HTTP/2 proxy - chromium - Monorail () <https://bugs.chromium.org/p/chromium/issues/detail?id=684681>