[25] ws:
は WebSocket over TCP、
wss:
は WebSocket over TLS over TCP
によってアクセスできる WebSocket 資源を表す URL scheme です。
[3] URL scheme、://
、 authority、path、
省略可能な query で構成されます。 query がある場合は、
直前に ?
が必要です。 >>2
[4] URL scheme は、 ws
または wss
です >>2。
[10] wss
であれば、当該 URL は「保安」であり、
the secure flag is set といいます >>2。
[5] authority は、ホストと、省略可能な port です。
port がある場合は直前に :
が必要です。 >>2
[6] ホストと port は、 RFC 3986 の定義が参照されています >>2。 現実には URL Standard に従い解釈されるものと思われます。
[7] path は、 RFC 3986 path-abempty
です >>2。
[8] query は、 RFC 3986 query
が参照されています >>2。
[11] 資源名は、
... を連結したものです >>2。
[21] 資源名の解釈は、 HTTP の場合と同じく、サーバーに委ねられています。 クライアントはその意味を一般的に解釈することはできません。
[22] 例えば query を application/x-www-form-urlencoded
形式にすることができますが、そう解釈して良いのはサーバーと、
サーバーがそのように解釈していることを知っているスクリプトだけです。
サーバーがどう解釈するか事前に知識を得ていないクライアントがそのように解釈してはいけません。
[23] WebSocket
コンストラクターは UTF-8 としてURLの解決を行うと規定されています。
つまりスクリプトが非ASCII文字を query に含めると、
UTF-8 としてパーセント符号化されてサーバーに送信されます。
パス部分の非ASCII文字も、 UTF-8 としてパーセント符号化されます。
ですから、WebSocketクライアントはパーセント符号化を UTF-8
として解釈することが好ましいと思われます。
[29] RFC は WebSocket接続の確立で URL の妥当性を確認することを求めていましたが、 その検査方法の詳細は不明でした。その曖昧な規定は Fetch Standard と HTML Standard の規定の厳密化により死文化しました。
[28] かつては独自の構文解析の手続きが HTML Standard で規定されていましたが、
その後 URL Standard が整備されたことから、削除されました。
ws:
や wss:
の URL も通常の
URLの構文解析が行われた後、 new WebSocket
の処理で最低限の検査を行い、プロトコルで利用されることになります。
[32] fetch は、 WebSocket の処理の場合、 URL scheme を WebSocket のものから HTTP のものに書き換えます。 各種仕様の URL に基づく操作は書き換え後の状態で適用されます。
[33] 従って HSTS、Mixed Content、Upgrade-Insecure-Requests
などは、 HTTP のみならず WebSocket にも同様の形で適用されます。
[26] Fix #244: improve HSTS language · whatwg/fetch@6568ab8 ( 版) <https://github.com/whatwg/fetch/commit/6568ab88c1fbfb581f63f8e5f020c367ef38e78d>
[27] Update WebSocket to use Fetch's WebSocket alterations · whatwg/html@3dadbca ( 版) <https://github.com/whatwg/html/commit/3dadbcad063a10b586ef52dd4b427aa339048ee7>