RFC 8307 WebSocketにおけるWell-Known URIの標準化

RFC 8307 Well-Known URIs for the WebSocket Protocol」でWebSocketにおいても Well-Known URIが使用できるようになりました。

この界隈では珍しく、個人ドラフトの-00から一気にRFCになっています
https://datatracker.ietf.org/doc/rfc8307/

Well-Known URI

httpやhttpsでは、Well-Known URIというものがあり特定用途に使用するURIが予約できるようになっています (RFC 5785)

例えば、https://example.com/.well-known/○○○○○ のように /.well-known/ 以下に特定用途のURIが予約されます。

現在登録されているWell-Known URIの一覧は、IANAのページから確認できます (URL)

例えば以下のような物があります

  • /.well-known/acme-challenge/ : 証明書自動発行のためのプロトコルであるACMEで、チャレンジに使用される
  • /.well-known/http-opportunistic : HTTPで日和見暗号を使用する際の情報が記載される
  • /.well-known/dns-query : DNS over HTTPのリクエスト先URIとして使用される(策定中の仕様)

WebSocketの場合

Well-Known URI自体を定義するRFC5785ではHTTPとHTTPS スキームの場合についてのみ言及しており、ws://やwss://での使用は定義されておりませんでした。

そこでRFC 8307では、ws://やwss://でもHTTPの場合と同様に Well-Known URIに対応する事が決められました。

用途

なぜこのような仕様が出てきたのか一見わからなかったのですがMLを遡ると、「CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets」という提案仕様においてWebSocketでもWell-Known URIを使うようだ。

CoAPは、IoTデバイスなどのリソース・ネットワークが制限された環境下での使用を目的とした軽量アプリケーションプロトコルで、この提案仕様はそのCoAPをWebSocket上で通信させる仕様のようだ。

以下のように、ws://でもWell-Known URIを使用している

ws://example.org/.well-known/coap

具体例を見るに、WebSocketのアップグレード手順内で使用されるエンドポイントのようだ。

            GET /.well-known/coap HTTP/1.1
            Host: example.org
            Upgrade: websocket
            Connection: Upgrade
            Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
            Sec-WebSocket-Protocol: coap
            Sec-WebSocket-Version: 13

なるほど。