<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-su-ai-gateway-discovery-01" category="info" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="AI Gateway Discovery">DNS-Based Service Discovery for AI Gateways</title>
    <seriesInfo name="Internet-Draft" value="draft-su-ai-gateway-discovery-01"/>
    <author initials="C." surname="Su" fullname="Changshan Su">
      <organization>Router-for-Me</organization>
      <address>
        <email>suchangshan@foxmail.com</email>
        <uri>https://github.com/router-for-me/CLIProxyAPI</uri>
      </address>
    </author>
    <date year="2026" month="October" day="28"/>
    <abstract>
      
<t>This document defines how a multi-protocol AI gateway announces itself
on a local network using DNS-Based Service Discovery (DNS-SD), and how a
client discovers it. A gateway publishes its host name, TCP port,
gateway mount path (<tt>path</tt>), and supported protocol identifiers using
<tt>_ai-gateway._tcp</tt>, DNS-SD subtypes, and a compact, vendor-neutral TXT
record.</t>
      <t>A single AI gateway listener can expose text, reasoning, token counting,
image generation, video generation, speech synthesis, realtime voice,
and search across HTTP, Server-Sent Events (SSE), WebSocket, and
WebRTC/SDP sessions. This profile lets clients discover those
capabilities without hardcoding addresses, ports, or vendor-specific TXT
keys, while keeping the default DNS TXT payload under 200 bytes (and
strictly capped at 400 bytes).</t>
      <t>This document only covers service discovery. It does not define AI
request payloads, model catalogs, API key distribution, or trust
bootstrap. Data learned from mDNS or DNS-SD is untrusted network input
and does not prove who operates the gateway.</t>
    </abstract>
  </front>
  <middle>
    
<section anchor="introduction">
      <name>Introduction</name>
      <t>Local developer tools, CLI agents (such as Codex CLI, Claude Code, and
DeepSeekHarness), IDE extensions, and desktop apps increasingly connect
to AI models through a unified gateway. Unlike a single-purpose
inference server, a full-featured AI gateway (such as CLIProxyAPI) acts
as a protocol router and translator across multiple wire protocols and
transport modes on a single listening port:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Text and reasoning</strong>: Open Responses <xref target="OpenResponses"/>
(<tt>/v1/responses</tt> over HTTP, SSE, compaction, and persistent WebSocket
streams), Chat Completions (<tt>/v1/chat/completions</tt>), Legacy
Completions (<tt>/v1/completions</tt>), Messages (<tt>/v1/messages</tt>), and
GenerateContent / Interactions (<tt>/v1beta/models/{model}:generateContent</tt>,
<tt>:streamGenerateContent</tt>, <tt>/v1beta/interactions</tt>).</t>
        </li>
        <li>
          <t><strong>Token accounting and model metadata</strong>: Authenticated model catalogs
(<tt>/v1/models</tt>, <tt>/v1beta/models</tt>) and token counting
(<tt>/v1/messages/count_tokens</tt>, <tt>:countTokens</tt>).</t>
        </li>
        <li>
          <t><strong>Multimodal generation</strong>: Image generation and editing
(<tt>/v1/images/generations</tt>, <tt>/v1/images/edits</tt>), video generation and
retrieval (<tt>/v1/videos*</tt>), and speech synthesis (<tt>/v1/audio/speech</tt>,
<tt>/v1/tts</tt>).</t>
        </li>
        <li>
          <t><strong>Realtime and agentic extensions</strong>: Realtime WebSocket and WebRTC/SDP
call sessions (<tt>/v1/realtime*</tt>, <tt>/v1/live*</tt>) and agentic search
(<tt>/v1/alpha/search</tt>).</t>
        </li>
      </ul>
      <t>On a local network, that gateway's IP address or port can change, and
users should not have to type connection settings by hand on every
device.</t>
      <t>Multicast DNS (mDNS) <xref target="RFC6762"/> and DNS-Based Service Discovery
(DNS-SD) <xref target="RFC6763"/> already solve host and port discovery on a LAN.
This document defines a vendor-neutral DNS-SD profile using the
IANA-registered service type <tt>_ai-gateway._tcp</tt>, capability subtypes,
and a 9-key TXT record format where every key is at most 9 characters
long (per Section 6.4 of <xref target="RFC6763"/>).</t>
      <section anchor="status-of-this-document">
        <name>Status of This Document</name>
        <t>This is an individual Internet-Draft (<tt>-01</tt>). Submitting an
Internet-Draft does not mean the IETF has endorsed it, adopted it in a
Working Group, or approved it as an Internet Standard.</t>
        <t>The service name <tt>ai-gateway</tt> (transport protocol TCP, service name
only) and its nine defined TXT keys (<tt>txtvers</tt>, <tt>path</tt>, <tt>tls</tt>, <tt>auth</tt>,
<tt>auth_type</tt>, <tt>protocols</tt>, <tt>product</tt>, <tt>id</tt>, <tt>role</tt>) have been registered
by IANA in the Service Name and Transport Protocol Port Number Registry
under <xref target="RFC6335"/>.</t>
      </section>
      <section anchor="what-this-document-covers-and-what-it-does-not">
        <name>What This Document Covers and What It Does Not</name>
        <t>This document covers four things:</t>
        <ul spacing="normal">
          <li>
            <t>how to list AI gateways on a local network;</t>
          </li>
          <li>
            <t>how to find a gateway's host, port, and root mount path (<tt>path</tt>);</t>
          </li>
          <li>
            <t>how to advertise supported wire protocols and multimodal capabilities
using vendor-neutral identifiers;</t>
          </li>
          <li>
            <t>how a client validates discovery data safely before authenticating and
querying model catalogs.</t>
          </li>
        </ul>
        <t>This document does not cover:</t>
        <ul spacing="normal">
          <li>
            <t>model names, per-model capabilities, or model routing rules;</t>
          </li>
          <li>
            <t>request or response JSON schemas for any AI API;</t>
          </li>
          <li>
            <t>sending API keys, OAuth tokens, or passwords over discovery;</t>
          </li>
          <li>
            <t>automatic pairing, trust bootstrap, or certificate issuance;</t>
          </li>
          <li>
            <t>gateway administration (<tt>/v0/management</tt>, <tt>/v8/management</tt>), billing,
or control-plane cluster protocols;</t>
          </li>
          <li>
            <t>wide-area discovery relays or standalone UDP/QUIC mDNS records.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
      <dl>
        <dt>Gateway:</dt>
        <dd>
          <t>An HTTP server or reverse proxy that exposes one or more AI wire
protocols over a TCP listener.</t>
        </dd>
        <dt>Advertiser:</dt>
        <dd>
          <t>The component that publishes the gateway's DNS-SD records.</t>
        </dd>
        <dt>Client:</dt>
        <dd>
          <t>An application, CLI, or library that browses and resolves those
records.</t>
        </dd>
        <dt>Gateway mount path (<tt>path</tt>):</dt>
        <dd>
          <t>The root URI path prefix where the gateway is mounted on the target
host (normally <tt>/</tt>, or a reverse-proxy prefix such as <tt>/ai</tt>). Each
individual wire protocol appends its own standard versioned route
(such as <tt>/v1/responses</tt> or <tt>/v1beta/interactions</tt>) beneath <tt>path</tt>.</t>
        </dd>
        <dt>Candidate endpoint:</dt>
        <dd>
          <t>A discovered gateway endpoint that has been parsed, but has not yet
been trusted or approved for sending credentials.</t>
        </dd>
      </dl>
    </section>
    <section anchor="service-records">
      <name>Service Records</name>
      <section anchor="service-type-and-transports">
        <name>Service Type and Transports</name>
        <t>The DNS-SD service type is <tt>_ai-gateway._tcp</tt>. In the IANA Service Name
and Transport Protocol Port Number Registry, this corresponds to the
registered service name <tt>ai-gateway</tt> over TCP.</t>
        <t>This specification does not ask for a fixed TCP port. Clients MUST read
the port from the SRV record and MUST NOT fall back to hardcoded ports
such as 80, 443, or 8317.</t>
        <t>On a local link using mDNS, the discovery domain is <tt>local.</tt>, so the
full service browse name is <tt>_ai-gateway._tcp.local.</tt>. Standard mDNS and
DNS-SD rules from <xref target="RFC6762"/> and <xref target="RFC6763"/> apply without change.</t>
        <t>The advertised TCP listener speaks HTTP <xref target="RFC9110"/>, optionally
protected by TLS <xref target="RFC9846"/>. Within that HTTP listener, individual
endpoints MAY use:</t>
        <ul spacing="normal">
          <li>
            <t>standard HTTP request/response (JSON, binary audio/video content, or
SDP payloads <xref target="RFC9429"/>);</t>
          </li>
          <li>
            <t>Server-Sent Events (SSE) for streaming token or event output;</t>
          </li>
          <li>
            <t>HTTP/2 <xref target="RFC9113"/> negotiated via ALPN or cleartext upgrade;</t>
          </li>
          <li>
            <t>WebSocket upgrades <xref target="RFC6455"/> on supported paths (such as
<tt>&lt;path&gt;/v1/responses</tt> and <tt>&lt;path&gt;/v1/realtime</tt>).</t>
          </li>
        </ul>
        <t>While <tt>_ai-gateway._tcp</tt> advertises the initial TCP listener, a gateway
that also enables HTTP/3 <xref target="RFC9114"/> over QUIC (when <tt>tls=1</tt>) MAY
upgrade discovered HTTPS connections to HTTP/3 using the standard HTTP
<tt>Alt-Svc</tt> header field <xref target="RFC7838"/>. Direct advertisement of QUIC-only
listeners via <tt>_ai-gateway._udp</tt> or DNS SVCB records is left for a
future extension.</t>
      </section>
      <section anchor="instance-target-host-and-ip-addresses">
        <name>Instance, Target Host, and IP Addresses</name>
        <t>As required by <xref target="RFC6763"/>, an advertiser MUST publish:</t>
        <ul spacing="normal">
          <li>
            <t>a PTR record from <tt>_ai-gateway._tcp.&lt;domain&gt;</tt> to the service instance
name;</t>
          </li>
          <li>
            <t>an SRV record giving the target host name and TCP port for that
instance;</t>
          </li>
          <li>
            <t>a TXT record carrying the metadata defined in this document;</t>
          </li>
          <li>
            <t>A and/or AAAA records for the target host name.</t>
          </li>
        </ul>
        <t>The SRV target is a DNS host name, not a URL. If the SRV target is <tt>.</tt>,
the service is unavailable and clients MUST ignore it.</t>
        <t>A gateway MUST only advertise addresses that are actually reachable on
the network interface where the announcement is sent. It MUST NOT
advertise a loopback-only listener (<tt>127.0.0.1</tt> or <tt>::1</tt>) on a LAN.</t>
        <t>Each service instance represents one listening port and one TLS mode. If
a gateway listens on both plaintext HTTP and HTTPS, it MUST advertise
them as two separate service instances.</t>
        <t>Instance naming, uniqueness probing, conflict resolution, TTL handling,
cache-flush flags, and goodbye packets MUST follow <xref target="RFC6762"/> and
<xref target="RFC6763"/>. A gateway MAY append a short stable suffix (such as
<tt>CPA-8F3B</tt>) so humans can recognize it across restarts, but clients MUST
NOT treat the instance name or <tt>id</tt> as proof of identity. Clients MUST
retain the network interface scope when handling IPv6 link-local
addresses.</t>
      </section>
      <section anchor="capability-subtypes-and-wire-protocol-routes">
        <name>Capability Subtypes and Wire-Protocol Routes</name>
        <t>A gateway MAY publish DNS-SD subtype PTR records so clients can filter
by wire protocol during browsing. Every subtype name is vendor-neutral
and names the wire operation rather than a company or model brand.</t>
        <t>To prevent mDNS packet bloat while supporting rich gateways, subtypes
are organized into two tiers: <strong>Core Subtypes</strong> (advertised by default
when supported) and <strong>Extended Subtypes</strong> (advertised when configured by
the operator).</t>
        <section anchor="core-subtypes">
          <name>Core Subtypes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Subtype label</th>
                <th align="left">Primary Inference Route</th>
                <th align="left">Optional Model Catalog Route</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>_responses</tt></td>
                <td align="left">
                  <tt>POST/GET &lt;path&gt;/v1/responses</tt>, <tt>/v1/responses/compact</tt></td>
                <td align="left">
                  <tt>GET &lt;path&gt;/v1/models</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_chat-completions</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1/chat/completions</tt></td>
                <td align="left">
                  <tt>GET &lt;path&gt;/v1/models</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_messages</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1/messages</tt>, <tt>/v1/messages/count_tokens</tt></td>
                <td align="left">
                  <tt>GET &lt;path&gt;/v1/models</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_generate-content</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1beta/models/{model}:generateContent</tt>, <tt>:streamGenerateContent</tt></td>
                <td align="left">
                  <tt>GET &lt;path&gt;/v1beta/models</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_interactions</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1beta/interactions</tt></td>
                <td align="left">
                  <tt>GET &lt;path&gt;/v1beta/models</tt></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="extended-subtypes">
          <name>Extended Subtypes</name>
          <t>Gateways that expose multimodal, realtime, or specialized agent endpoints
MAY also advertise the following subtypes:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Subtype label</th>
                <th align="left">Standard Route Relative to path</th>
                <th align="left">Capability</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>_completions</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1/completions</tt></td>
                <td align="left">Legacy text completions</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_responses-ws</tt></td>
                <td align="left">
                  <tt>GET &lt;path&gt;/v1/responses</tt> (WebSocket)</td>
                <td align="left">Persistent WebSocket Responses stream</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_realtime</tt></td>
                <td align="left">
                  <tt>GET/POST &lt;path&gt;/v1/realtime*</tt>, <tt>/v1/live*</tt></td>
                <td align="left">Realtime voice/video (WebSocket, WebRTC SDP, SIP control)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_images</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1/images/generations</tt>, <tt>/v1/images/edits</tt></td>
                <td align="left">Image generation and editing</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_videos</tt></td>
                <td align="left">
                  <tt>POST/GET &lt;path&gt;/v1/videos*</tt></td>
                <td align="left">Video generation, editing, and retrieval</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_audio</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1/audio/speech</tt>, <tt>/v1/tts</tt></td>
                <td align="left">Speech synthesis (TTS)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_count-tokens</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1/messages/count_tokens</tt>, <tt>:countTokens</tt></td>
                <td align="left">Standalone token counting</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>_search</tt></td>
                <td align="left">
                  <tt>POST &lt;path&gt;/v1/alpha/search</tt></td>
                <td align="left">Agentic web/code search</td>
              </tr>
            </tbody>
          </table>
          <t>For example, a gateway advertising the <tt>_responses</tt> subtype over mDNS
publishes a PTR record at:</t>
          <t><tt>_responses._sub._ai-gateway._tcp.local.</tt></t>
          <t>pointing to the same service instance name as <tt>_ai-gateway._tcp.local.</tt>.</t>
          <t>A gateway MUST only advertise subtypes for routes that are enabled on
that listener. Advertising a subtype does not guarantee that every user
credential or upstream model supports that operation. If a client sees a
subtype it does not recognize, it MUST ignore the unknown subtype rather
than rejecting the gateway.</t>
        </section>
      </section>
    </section>
    <section anchor="txt-record-format">
      <name>TXT Record Format</name>
      <section anchor="basic-rules-key-length-compliance-and-the-400-byte-budget">
        <name>Basic Rules, Key Length Compliance, and the 400-Byte Budget</name>
        <t>TXT records follow Section 6 of <xref target="RFC6763"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Each attribute is stored as a separate DNS TXT character-string in the
form <tt>key=value</tt>.</t>
          </li>
          <li>
            <t>Keys are case-insensitive. Advertisers MUST write keys in lowercase.</t>
          </li>
          <li>
            <t><strong>Strict 9-character key limit</strong>: Every TXT key defined in this
specification is <strong>at most 9 characters long</strong> (<tt>txtvers</tt>, <tt>path</tt>,
<tt>tls</tt>, <tt>auth</tt>, <tt>auth_type</tt>, <tt>protocols</tt>, <tt>product</tt>, <tt>id</tt>, <tt>role</tt>),
strictly complying with Section 6.4 of <xref target="RFC6763"/>, and contains no
vendor or model trademarks.</t>
          </li>
          <li>
            <t>Values are case-sensitive unless stated otherwise.</t>
          </li>
          <li>
            <t>Advertisers MUST NOT put duplicate keys in the same TXT record. If a
client receives duplicate keys (even with different casing), it MUST
keep the first one and ignore the rest, as required by Section 6.4 of
<xref target="RFC6763"/>.</t>
          </li>
        </ul>
        <t>To keep mDNS packets small and avoid IP fragmentation on local networks:</t>
        <ul spacing="normal">
          <li>
            <t>each <tt>key=value</tt> string MUST be at most 255 bytes;</t>
          </li>
          <li>
            <t>the entire TXT record payload (including the 1-byte length prefix in
front of each string) MUST be at most 400 bytes;</t>
          </li>
          <li>
            <t>all keys and values defined here use printable US-ASCII (<tt>0x20</tt> to
<tt>0x7E</tt>), and every key requires a non-empty value after <tt>=</tt>.</t>
          </li>
        </ul>
        <t>Advertisers pack TXT attributes in priority order:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Priority 1 (Mandatory Core)</strong>: <tt>txtvers</tt> (placed first per Section
6.7 of <xref target="RFC6763"/>), <tt>path</tt>, <tt>tls</tt>, <tt>auth</tt>.</t>
          </li>
          <li>
            <t><strong>Priority 2 (Capabilities &amp; Identity)</strong>: <tt>protocols</tt>, <tt>auth_type</tt>,
<tt>product</tt>, <tt>id</tt>.</t>
          </li>
          <li>
            <t><strong>Priority 3 (Optional Hints)</strong>: <tt>role</tt>.</t>
          </li>
        </ol>
        <t>If adding an optional attribute would push the TXT record over 400
bytes, the advertiser MUST omit that optional attribute rather than
truncating a value or dropping a required attribute.</t>
      </section>
      <section anchor="required-attributes">
        <name>Required Attributes</name>
        <t>Every advertisement under this profile MUST include these four
attributes:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Key</th>
              <th align="left">Length</th>
              <th align="left">Allowed value</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>txtvers</tt></td>
              <td align="left">7</td>
              <td align="left">
                <tt>1</tt></td>
              <td align="left">Version of this discovery TXT format (<xref target="RFC6763"/> Section 6.7)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>path</tt></td>
              <td align="left">4</td>
              <td align="left">Valid relative path (typically <tt>/</tt>)</td>
              <td align="left">Root mount path of the gateway on the HTTP host (<xref target="RFC6763"/> Section 6.5)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>tls</tt></td>
              <td align="left">3</td>
              <td align="left">
                <tt>0</tt> or <tt>1</tt></td>
              <td align="left">
                <tt>0</tt> for HTTP/WS, <tt>1</tt> for HTTPS/WSS</td>
            </tr>
            <tr>
              <td align="left">
                <tt>auth</tt></td>
              <td align="left">4</td>
              <td align="left">
                <tt>0</tt> or <tt>1</tt></td>
              <td align="left">
                <tt>0</tt> if unauthenticated requests are allowed, <tt>1</tt> if credentials are required</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t><tt>txtvers</tt>: Placed as the first TXT key per Section 6.7 of <xref target="RFC6763"/>.
It identifies the discovery metadata format, not the gateway's
software version. Clients that do not support the advertised <tt>txtvers</tt>
MUST NOT parse the record as version 1.</t>
          </li>
          <li>
            <t><tt>path</tt>: Uses the standard DNS-SD HTTP <tt>path</tt> key (<xref target="RFC6763"/> Section
6.5) to indicate the gateway's root mount prefix on the target host
and port. For a standalone gateway, <tt>path</tt> is <tt>/</tt>. For a gateway
mounted behind a reverse proxy at <tt>/ai</tt>, <tt>path</tt> is <tt>/ai</tt>.</t>
          </li>
          <li>
            <t><tt>tls</tt>: Selects <tt>http</tt>/<tt>ws</tt> (<tt>0</tt>) or <tt>https</tt>/<tt>wss</tt> (<tt>1</tt>). If <tt>tls</tt> is
missing or invalid, the client MUST reject the candidate and MUST NOT
default to plaintext.</t>
          </li>
          <li>
            <t><tt>auth</tt>: Uses compact <tt>0</tt>/<tt>1</tt> boolean encoding (<tt>1</tt> means authentication
required, <tt>0</tt> means not required). If <tt>auth</tt> is missing or invalid,
the client MUST reject the candidate and MUST NOT assume <tt>0</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="validation-of-path-and-endpoint-construction">
        <name>Validation of <tt>path</tt> and Endpoint Construction</name>
        <t>The <tt>path</tt> value is always an absolute-path reference <xref target="RFC3986"/> on the
discovered host and port, never a full URI. To be valid, <tt>path</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>MUST start with a single <tt>/</tt>;</t>
          </li>
          <li>
            <t>MAY be <tt>/</tt> (the default for standalone gateways);</t>
          </li>
          <li>
            <t>MUST NOT start with <tt>//</tt> or contain <tt>://</tt>;</t>
          </li>
          <li>
            <t>MUST NOT contain <tt>?</tt>, <tt>#</tt>, <tt>\</tt>, spaces, or control characters;</t>
          </li>
          <li>
            <t>MUST NOT end with <tt>/</tt> (unless the entire path is <tt>/</tt>);</t>
          </li>
          <li>
            <t>MUST NOT contain empty segments (<tt>//</tt>), <tt>.</tt> segments, <tt>..</tt> segments,
or percent-encoding (<tt>%xx</tt>).</t>
          </li>
        </ul>
        <t>If <tt>path</tt> is missing or fails validation, the client MUST treat the
service instance as unusable.</t>
        <t>To construct a request URL for a supported wire protocol, the client
concatenates the scheme (<tt>http</tt>/<tt>https</tt> or <tt>ws</tt>/<tt>wss</tt>), the SRV target
host (or a resolved A/AAAA IP address) and SRV port, the validated
<tt>path</tt> (omitting a trailing slash when <tt>path</tt> is <tt>/</tt>), and the
protocol's standard route from Section 3.3:</t>
        <ul spacing="normal">
          <li>
            <t>When <tt>path=/</tt> (for example, on <tt>192.0.2.10:8317</tt> with <tt>tls=0</tt>):
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>_responses</tt> -&gt; <tt>http://192.0.2.10:8317/v1/responses</tt></t>
              </li>
              <li>
                <t><tt>_chat-completions</tt> -&gt; <tt>http://192.0.2.10:8317/v1/chat/completions</tt></t>
              </li>
              <li>
                <t><tt>_messages</tt> -&gt; <tt>http://192.0.2.10:8317/v1/messages</tt></t>
              </li>
              <li>
                <t><tt>_interactions</tt> -&gt; <tt>http://192.0.2.10:8317/v1beta/interactions</tt></t>
              </li>
              <li>
                <t><tt>_generate-content</tt> -&gt;
<tt>http://192.0.2.10:8317/v1beta/models/{model}:generateContent</tt></t>
              </li>
              <li>
                <t>Model catalog -&gt; <tt>http://192.0.2.10:8317/v1/models</tt> (or
<tt>http://192.0.2.10:8317/v1beta/models</tt>)</t>
              </li>
            </ul>
          </li>
          <li>
            <t>When <tt>path=/ai</tt> (mounted behind a reverse-proxy prefix):
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>_responses</tt> -&gt; <tt>&lt;scheme&gt;://&lt;host&gt;:&lt;port&gt;/ai/v1/responses</tt></t>
              </li>
              <li>
                <t><tt>_interactions</tt> -&gt; <tt>&lt;scheme&gt;://&lt;host&gt;:&lt;port&gt;/ai/v1beta/interactions</tt></t>
              </li>
              <li>
                <t>Model catalog -&gt; <tt>&lt;scheme&gt;://&lt;host&gt;:&lt;port&gt;/ai/v1/models</tt></t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="optional-attributes-and-capability-vocabulary">
        <name>Optional Attributes and Capability Vocabulary</name>
        <table>
          <thead>
            <tr>
              <th align="left">Key</th>
              <th align="left">Length</th>
              <th align="left">Format</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>protocols</tt></td>
              <td align="left">9</td>
              <td align="left">Comma-separated tokens</td>
              <td align="left">Supported wire protocols and capabilities</td>
            </tr>
            <tr>
              <td align="left">
                <tt>auth_type</tt></td>
              <td align="left">9</td>
              <td align="left">Comma-separated tokens</td>
              <td align="left">Accepted authentication mechanisms</td>
            </tr>
            <tr>
              <td align="left">
                <tt>product</tt></td>
              <td align="left">7</td>
              <td align="left">Non-empty printable ASCII</td>
              <td align="left">Software identifier (e.g., <tt>cliproxyapi</tt>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>id</tt></td>
              <td align="left">2</td>
              <td align="left">Non-empty printable ASCII</td>
              <td align="left">Short non-cryptographic instance ID (e.g., <tt>8F3B</tt>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>role</tt></td>
              <td align="left">4</td>
              <td align="left">Non-empty printable ASCII</td>
              <td align="left">Deployment role hint (e.g., <tt>standalone</tt>)</td>
            </tr>
          </tbody>
        </table>
        <t>For comma-separated lists (<tt>protocols</tt>, <tt>auth_type</tt>), tokens use
lowercase ASCII letters, digits, <tt>-</tt>, or <tt>_</tt>, with no spaces or empty
items. Clients MUST ignore unknown tokens.</t>
        <section anchor="standard-protocols-tokens">
          <name>Standard <tt>protocols</tt> Tokens</name>
          <t>The <tt>protocols</tt> list is the single TXT capability list. Its tokens match
the subtype labels in Section 3.3 without their leading underscore:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Core default set</strong>:
<tt>chat-completions</tt>, <tt>responses</tt>, <tt>messages</tt>, <tt>generate-content</tt>,
<tt>interactions</tt></t>
            </li>
            <li>
              <t><strong>Extended tokens</strong> (may be advertised when enabled and within the
400-byte budget):
<tt>completions</tt>, <tt>responses-ws</tt>, <tt>realtime</tt>, <tt>images</tt>, <tt>videos</tt>,
<tt>audio</tt>, <tt>count-tokens</tt>, <tt>search</tt></t>
            </li>
          </ul>
        </section>
        <section anchor="standard-authtype-tokens">
          <name>Standard <tt>auth_type</tt> Tokens</name>
          <ul spacing="normal">
            <li>
              <t><tt>api_key</tt>: API key authentication. The client sends the key using the
standard HTTP header for the wire protocol being called:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>/v1/responses</tt>, <tt>/v1/chat/completions</tt>, <tt>/v1/models</tt>, and other
<tt>/v1/*</tt> routes: <tt>Authorization: Bearer &lt;key&gt;</tt></t>
                </li>
                <li>
                  <t><tt>/v1/messages</tt> and <tt>/v1/messages/count_tokens</tt>: <tt>x-api-key: &lt;key&gt;</tt>
or <tt>Authorization: Bearer &lt;key&gt;</tt></t>
                </li>
                <li>
                  <t><tt>/v1beta/*</tt> (<tt>:generateContent</tt>, <tt>/interactions</tt>, <tt>/v1beta/models</tt>):
<tt>x-goog-api-key: &lt;key&gt;</tt></t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>oauth</tt>: OAuth / token-backed client sessions where applicable.</t>
            </li>
          </ul>
        </section>
        <section anchor="exclusion-of-management-interfaces">
          <name>Exclusion of Management Interfaces</name>
          <t>Gateways MUST NOT use <tt>_ai-gateway._tcp</tt> to advertise management
endpoints (such as <tt>/v0/management</tt>, <tt>/v8/management</tt>, or
<tt>/management.html</tt>), and advertisers SHOULD NOT emit any management TXT
key.</t>
        </section>
      </section>
    </section>
    <section anchor="how-a-client-uses-discovery-results">
      <name>How a Client Uses Discovery Results</name>
      <t>A client follows five steps:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Browse</strong>: Query <tt>_ai-gateway._tcp</tt> (or a desired subtype such as
<tt>_responses._sub._ai-gateway._tcp</tt>) on allowed local interfaces.
Clients looking for a specific gateway product (such as CPA) MAY
prioritize instances with <tt>product=cliproxyapi</tt> while retaining
standard gateways as fallbacks.</t>
        </li>
        <li>
          <t><strong>Resolve</strong>: Fetch SRV, TXT, and A/AAAA records for each discovered
instance.</t>
        </li>
        <li>
          <t><strong>Validate</strong>: Check that <tt>txtvers=1</tt>, <tt>path</tt>, <tt>tls</tt>, <tt>auth</tt>, the TCP
port (<tt>1..65535</tt>), and usable IP addresses are present and valid.</t>
        </li>
        <li>
          <t><strong>Filter addresses and preserve IPv6 scope</strong>: Reject loopback,
unspecified (<tt>0.0.0.0</tt>, <tt>::</tt>), multicast, or other addresses blocked
by local policy. When connecting to an IPv6 link-local address
(<tt>fe80::/10</tt>), the client MUST attach the local network interface
zone identifier (for example, <tt>%en0</tt>) learned during discovery.</t>
        </li>
        <li>
          <t><strong>Confirm trust before sending requests (and optionally query <tt>&lt;path&gt;/v1/models</tt>)</strong>:
Show the candidate to the user or match it against pre-configured
trust rules. Querying <tt>&lt;path&gt;/v1/models</tt> or <tt>&lt;path&gt;/v1beta/models</tt>
is OPTIONAL: a client that already knows the target model name MAY
send inference requests directly after trust confirmation. When a
client does query the model catalog to populate a model selector:
          </t>
          <ul spacing="normal">
            <li>
              <t>When <tt>auth=0</tt> (unauthenticated LAN gateway): after trust
confirmation, the client MAY query <tt>GET &lt;path&gt;/v1/models</tt> or
<tt>GET &lt;path&gt;/v1beta/models</tt> without an API key.</t>
            </li>
            <li>
              <t>When <tt>auth=1</tt> (authenticated gateway): if the client queries
<tt>&lt;path&gt;/v1/models</tt> or <tt>&lt;path&gt;/v1beta/models</tt>, it MUST include a
valid API key and MUST NOT call those endpoints unauthenticated;
pre-authentication filtering relies on DNS-SD subtypes and TXT
<tt>protocols</tt> (and optional <tt>GET/HEAD &lt;path&gt;/healthz</tt> liveness
checks).</t>
            </li>
          </ul>
        </li>
      </ol>
      <t>Clients MUST NOT automatically send API keys to a newly discovered
gateway just because its instance name, <tt>product</tt>, or <tt>id</tt> matches a
previously seen gateway. On HTTP redirects to a different origin,
clients MUST NOT automatically forward credentials.</t>
    </section>
    <section anchor="example-dns-sd-records-cliproxyapi-default-profile">
      <name>Example DNS-SD Records (CLIProxyAPI Default Profile)</name>
      <t>The example below shows a CLIProxyAPI instance (<tt>CPA-8F3B</tt>) advertising
on port 8317 over mDNS with its core subtypes and 9-key TXT record:</t>
      <artwork><![CDATA[
_ai-gateway._tcp.local. PTR CPA-8F3B._ai-gateway._tcp.local.

CPA-8F3B._ai-gateway._tcp.local. SRV 0 0 8317 cpa-8f3b.local.
CPA-8F3B._ai-gateway._tcp.local. TXT (
  "txtvers=1"
  "path=/"
  "tls=0"
  "auth=1"
  "auth_type=api_key"
  "product=cliproxyapi"
  "id=8F3B"
  "role=standalone"
  "protocols=responses,chat-completions,messages,interactions"
)

cpa-8f3b.local. A    192.0.2.10
cpa-8f3b.local. AAAA 2001:db8::10

_responses._sub._ai-gateway._tcp.local.
  PTR CPA-8F3B._ai-gateway._tcp.local.
_chat-completions._sub._ai-gateway._tcp.local.
  PTR CPA-8F3B._ai-gateway._tcp.local.
_messages._sub._ai-gateway._tcp.local.
  PTR CPA-8F3B._ai-gateway._tcp.local.
_interactions._sub._ai-gateway._tcp.local.
  PTR CPA-8F3B._ai-gateway._tcp.local.
]]></artwork>
      <t>The TXT payload above is <strong>151 bytes</strong> (or <strong>168 bytes</strong> when all five
core protocols including <tt>generate-content</tt> are listed, including the
1-byte length prefix for each of the 9 strings) -- well under half of
the 400-byte limit -- with every key at most 9 characters long and zero
vendor trademarks in the TXT schema.</t>
    </section>
    <section anchor="operational-guidance">
      <name>Operational Guidance</name>
      <ul spacing="normal">
        <li>
          <t><strong>Off by default unless enabled</strong>: Gateways SHOULD keep LAN
broadcasting disabled until enabled in configuration.</t>
        </li>
        <li>
          <t><strong>Physical LAN interfaces only (Scheme C)</strong>: Gateways SHOULD filter
out loopback (<tt>lo*</tt>), container bridges (<tt>docker*</tt>, <tt>veth*</tt>, <tt>br-*</tt>),
VPN tunnels (<tt>utun*</tt>, <tt>tailscale*</tt>, <tt>wg*</tt>, <tt>tun*</tt>, <tt>tap*</tt>), and
virtual interfaces (<tt>awdl*</tt>, <tt>llw*</tt>) by default, and refuse to fall
back to all interfaces if no physical LAN interface qualifies. In
Docker, host networking (<tt>--net=host</tt>) is required to multicast on the
physical LAN.</t>
        </li>
        <li>
          <t><strong>Zero-config CLI discovery</strong>: Implementations SHOULD provide a
standalone discovery command (such as <tt>cli-proxy-api -discover</tt> or
<tt>cli-proxy-api discover</tt>) that can browse the LAN before loading a
server configuration file.</t>
        </li>
        <li>
          <t><strong>Two-stage discovery (unauthenticated mDNS, authenticated <tt>/models</tt>)</strong>:
Do not place model catalogs, per-provider quotas, or secrets in TXT
records. Because different API keys on a gateway can have different
model permissions, there is no single unauthenticated model list.
Clients filter gateways before authentication using DNS-SD subtypes
and TXT <tt>protocols</tt>, and query <tt>&lt;path&gt;/v1/models</tt> or
<tt>&lt;path&gt;/v1beta/models</tt> with the user's API key after authentication.</t>
        </li>
        <li>
          <t><strong>Flood protection</strong>: Clients MUST cap retained services, IP addresses
per service, and TXT entries per service (for example: at most 256
services, 64 IP addresses per service, and 64 TXT strings per
service), cancel internal browsing once the service cap is reached,
and strictly respect the caller's cancellation or deadline policy
without injecting hidden shorter timeouts.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="spoofing-on-the-local-network">
        <name>Spoofing on the Local Network</name>
        <t>Anyone on the local network segment can broadcast forged mDNS packets,
impersonate <tt>CPA-&lt;id&gt;</tt>, claim <tt>auth=0</tt>, or point the SRV record at an
attacker-controlled host. Clients MUST treat all discovery fields as
untrusted hints until verified by user confirmation, TLS server
identity verification <xref target="RFC9525"/>, pinned certificates, or
pre-configured policy.</t>
      </section>
      <section anchor="protecting-api-keys-and-credentials">
        <name>Protecting API Keys and Credentials</name>
        <t>Advertisers MUST NOT place API keys, OAuth tokens, management keys, or
private URLs in TXT records.</t>
        <t>Clients MUST NOT send reusable API keys over plaintext HTTP or WS
(<tt>tls=0</tt>) unless explicitly approved by the user or operator for a
trusted local environment. A new mDNS announcement with <tt>tls=0</tt> MUST NOT
downgrade a previously trusted HTTPS/WSS gateway to plaintext.</t>
      </section>
      <section anchor="preventing-ssrf-and-internal-network-probing">
        <name>Preventing SSRF and Internal Network Probing</name>
        <t>Because the SRV target host, resolved IPs, and <tt>path</tt> come from
untrusted multicast input, clients MUST validate <tt>path</tt> using Section
4.3, reject loopback/unspecified/special-purpose IP addresses, and
re-verify destinations on any HTTP redirect.</t>
      </section>
      <section anchor="dos-and-local-privacy">
        <name>DoS and Local Privacy</name>
        <t>Clients MUST enforce hard bounds on discovered services, addresses, and
TXT bytes to prevent memory exhaustion from mDNS packet floods. Operators
SHOULD be able to customize or disable advertised instance names when
LAN privacy is required.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA has registered the <tt>ai-gateway</tt> service name (without a fixed
port) in the Service Name and Transport Protocol Port Number Registry
under <xref target="RFC6335"/>:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Field</th>
            <th align="left">Registered Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Service Name</td>
            <td align="left">
              <tt>ai-gateway</tt></td>
          </tr>
          <tr>
            <td align="left">Transport Protocol</td>
            <td align="left">TCP</td>
          </tr>
          <tr>
            <td align="left">Description</td>
            <td align="left">AI Gateway Local Discovery</td>
          </tr>
          <tr>
            <td align="left">Port Number</td>
            <td align="left">None (service name only)</td>
          </tr>
          <tr>
            <td align="left">Assignee</td>
            <td align="left">Changshan Su (Router-for-Me), suchangshan@foxmail.com</td>
          </tr>
          <tr>
            <td align="left">Contact</td>
            <td align="left">Changshan Su (Router-for-Me), suchangshan@foxmail.com</td>
          </tr>
          <tr>
            <td align="left">Registration Date</td>
            <td align="left">2026-10-27</td>
          </tr>
          <tr>
            <td align="left">Reference</td>
            <td align="left">
              <tt>draft-su-ai-gateway-discovery</tt></td>
          </tr>
          <tr>
            <td align="left">Defined TXT Keys</td>
            <td align="left">
              <tt>txtvers</tt>, <tt>path</tt>, <tt>tls</tt>, <tt>auth</tt>, <tt>auth_type</tt>, <tt>protocols</tt>, <tt>product</tt>, <tt>id</tt>, <tt>role</tt></td>
          </tr>
        </tbody>
      </table>
      <t>This draft does not ask IANA to create any new registries for subtypes
or TXT keys; general registration procedures are described in
<xref target="RFC8126"/>.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section records current implementation experience for reader
context and is intended to be removed before final RFC publication.</t>
      <t>CLIProxyAPI (CPA) implements LAN service advertisement and discovery in
<tt>internal/discovery</tt> and <tt>sdk/cliproxy</tt> using
<tt>github.com/libp2p/zeroconf/v2</tt>, paired with the <tt>cli-proxy-api
-discover</tt> CLI command.
Repository: <eref target="https://github.com/router-for-me/CLIProxyAPI">https://github.com/router-for-me/CLIProxyAPI</eref></t>
      <t>CPA exposes Open Responses (<tt>/v1/responses</tt>), Chat Completions
(<tt>/v1/chat/completions</tt>), Messages (<tt>/v1/messages</tt>), GenerateContent and
Interactions (<tt>/v1beta/*</tt>), and multimodal/realtime endpoints on a
unified TCP listener (supporting HTTP/1.1, HTTP/2, SSE, WebSocket, and
WebRTC SDP calls), and advertises <tt>_ai-gateway._tcp</tt> over mDNS.</t>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document draws on the DNS-SD and mDNS specifications (<xref target="RFC6762"/>,
<xref target="RFC6763"/>), the Open Responses specification <xref target="OpenResponses"/>, and
implementation work in CLIProxyAPI.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC6762">
          <front>
            <title>Multicast DNS</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important. In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t>
              <t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server. In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t>
              <t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6762"/>
          <seriesInfo name="DOI" value="10.17487/RFC6762"/>
        </reference>
        <reference anchor="RFC6763">
          <front>
            <title>DNS-Based Service Discovery</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>This document specifies how DNS resource records are named and structured to facilitate service discovery. Given a type of service that a client is looking for, and a domain in which the client is looking for that service, this mechanism allows clients to discover a list of named instances of that desired service, using standard DNS queries. This mechanism is referred to as DNS-based Service Discovery, or DNS-SD.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6763"/>
          <seriesInfo name="DOI" value="10.17487/RFC6763"/>
        </reference>
        <reference anchor="RFC6335">
          <front>
            <title>Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="L. Eggert" initials="L." surname="Eggert"/>
            <author fullname="J. Touch" initials="J." surname="Touch"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="August" year="2011"/>
            <abstract>
              <t>This document defines the procedures that the Internet Assigned Numbers Authority (IANA) uses when handling assignment and other requests related to the Service Name and Transport Protocol Port Number registry. It also discusses the rationale and principles behind these procedures and how they facilitate the long-term sustainability of the registry.</t>
              <t>This document updates IANA's procedures by obsoleting the previous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the IANA Allocation Guidelines, and it updates the IANA service name and port assignment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), and the Stream Control Transmission Protocol (SCTP). It also updates the DNS SRV specification to clarify what a service name is and how it is registered. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="165"/>
          <seriesInfo name="RFC" value="6335"/>
          <seriesInfo name="DOI" value="10.17487/RFC6335"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC6455">
          <front>
            <title>The WebSocket Protocol</title>
            <author fullname="I. Fette" initials="I." surname="Fette"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. The security model used for this is the origin-based security model commonly used by web browsers. The protocol consists of an opening handshake followed by basic message framing, layered over TCP. The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or s and long polling). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6455"/>
          <seriesInfo name="DOI" value="10.17487/RFC6455"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9525">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>Many application technologies enable secure communication between two entities by means of Transport Layer Security (TLS) with Internet Public Key Infrastructure using X.509 (PKIX) certificates. This document specifies procedures for representing and verifying the identity of application services in such interactions.</t>
              <t>This document obsoletes RFC 6125.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9525"/>
          <seriesInfo name="DOI" value="10.17487/RFC9525"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7838">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="RFC9429">
          <front>
            <title>JavaScript Session Establishment Protocol (JSEP)</title>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
            <date month="April" year="2024"/>
            <abstract>
              <t>This document describes the mechanisms for allowing a JavaScript application to control the signaling plane of a multimedia session via the interface specified in the W3C RTCPeerConnection API and discusses how this relates to existing signaling protocols.</t>
              <t>This specification obsoletes RFC 8829.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9429"/>
          <seriesInfo name="DOI" value="10.17487/RFC9429"/>
        </reference>
        <reference anchor="RFC9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </reference>
        <reference anchor="OpenResponses" target="https://www.openresponses.org/specification">
          <front>
            <title>Open Responses Specification</title>
            <author>
              <organization/>
            </author>
            <date year="2026" month="April"/>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA619+XPbSJLu7/grKtyxO5SChyTfnLbfkyW7W298aCW5e+fF
i2iCRJHCGgS4ACiZPfb87S+/zKwDpGR3x87OzpgEUVdWHl8eVRoMBkmbt4Ud
mwen7y8Hr9LGZubS1jf5zJrTvJlVN7bemHlVm+Mz81Pa2tt00zxI0um0tjfU
KjwNrz9IsmpWpkvqNavTeTto1oM0HyzkvUHm3hscHCYzerio6s3Y5OW8Spr1
dJk3TV6V7WZF7c9eX71J8lU9Nm29btqjg4PnB0dJ06Zl9ltaVKXlH2xSpOVi
bGyZJOm6va7qcWLMgLpsxuZkaC7X9NUYmdLJNb3b0P+4x1VNTS+qdWvrAS10
8M7yY7tM82LMH9FXs565hv97Xn3Gj8NZteTf13U+Ntdtu2rGo9Eib6/XU/w2
qkOnSzs6eXt2XlefN8fnZ0lSVvUybfMbixEu3pwcHR4+14/PDp8+0o9Pnj45
Ch8fuo8PHz7Wjw+fP3vinj567J4+Pzw8cB8fH9FT0LY73tNnD5/58Y6ehIYP
w0c3i+ePjtzcnj97xO9+WNnywjarqmxsI0RyfISfjP/NXK7sLJ/ntM+0qQ/k
zbRe2DZQ7Pb2dlhRq9o1GtKWjJq4IbfLiFfG5ujg6Mng4FGSDAYDk06btk5n
bZJcXeeNIb5bL23ZmszO85JGv65uTWqW66LNB6u6aqtZVYCTlRdNWpbVupzR
m3nb2GKeVCW9X1SztDClbW+r+pNZN3m5MN8Sjx5+vDzd61N/mYyZzIqcJ6Iv
YYChOfYDr9bTIm+uZWBq0rTMnn1zdXJuVlXd9hP36pJm2JpV2l6b3gT/THSg
Zr3CmzQlv7Q8o0GJahiQ551MfguiN/ytna0mfSPTpfZTSFkjvaWGWHZFtOyb
G1tmxLOlXRNxC3P1n1dJbWdVnQ2T5Nig28LGVKSVtLa0tZmRVNnPq6qxprWf
qafapk1VUoO+aatPxBgzLAbfk3yZLqxZoB1vMQ1Ls686T4gH7OzaNJuyJVLl
DXdIe7m05qaiPegnTAeb1vRWOqurpjE/X12d93mTSPQusQevaT1E5N7l5Wui
3K92elnNPtmWl53Q14urk9Hl6Tn1w5qnGRpmJiLqPKeFFpYay3Y2fj8NaZnG
kvpapdO8yNucdvKWJJ8k3lyndTarMnBNmmXE1Q1ojK2if0iTKnkdgzN9P9kN
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
AA==

-->

</rfc>
