<?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-rfc2629 version 1.6.2 (Ruby 3.0.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-duke-httpbis-quic-version-alt-svc-00" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title>An Alt-Svc Parameter for QUIC Versions</title>
    <seriesInfo name="Internet-Draft" value="draft-duke-httpbis-quic-version-alt-svc-00"/>
    <author fullname="Martin Duke">
      <organization>Google</organization>
      <address>
        <email>martin.h.duke@gmail.com</email>
      </address>
    </author>
    <author fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2022" month="March" day="04"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTP</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>HTTP Alternative Services (Alt-Svc) describes how one origin's resource can be
accessed via a different protocol/host/port combination. Alternatives are
advertised by servers using the Alt-Svc header field or the ALTSVC frame. This
includes a protocol name, which reuses Application Layer Protocol Negotiation
(ALPN) codepoints. The "h3" codepoint indicates the availability of HTTP/3. A
client that uses such an alternative first makes a QUIC connection. However,
without a priori knowledge of which QUIC version to use, clients might incur a
round-trip latency penalty to complete QUIC version negotiation, or forfeit
desirable properties of a QUIC version. This document specifies a new Alt-Svc
parameter that specifies alternative supported QUIC versions, which
substantially reduces the chance of this penalty.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://martinduke.github.io/quic-version-alt-svc-parameter/draft-duke-httpbis-quic-version-alt-svc.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-duke-httpbis-quic-version-alt-svc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/martinduke/quic-version-alt-svc-parameter"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP Alternative Services (Alt-Svc) <xref target="ALTSVC"/>
describes how one origin's resource can be accessed via a different
protocol/host/port combination. Alternatives are advertised by servers using the
Alt-Svc header field or the ALTSVC frame. This includes a protocol name, which
reuses codepoints from the Application-Layer Protocol Negotiation (ALPN) TLS
extension <xref target="RFC7301"/>. Servers can advertise multiple alternatives, in which
case the order reflects the server's preferences (the first value being the most
preferred).</t>
      <t>Clients can ignore alternative services, or pick one at their discretion. A
client might use any details from the advertisement, in addition to out of
band information, in determining if an alternative is suitable or preferred.</t>
      <t>While ALPN was originally intend to allow multiple applications to utilize TLS
or DTLS on the same IP address and TCP or UDP port, ALPN can also usefully
identify the transport in an Alt-Svc context. The "h3" ALPN codepoint informs
the client that it can use HTTP/3 <xref target="I-D.ietf-quic-http"/> for access, which in
turn requires the QUIC transport protocol <xref target="RFC8999"/>.</t>
      <t>QUIC is versioned. A client and server that both support a QUIC version can,
through a negotiation process, generally agree on that version in no more than
one round-trip. However, to avoid that penalty clients might use the most
commonly deployed QUIC version (e.g. version 1 <xref target="RFC9000"/> at the time of
writing), rather than the version with the most desirable properties for the
client's use case.</t>
      <t>To avoid the round-trip, one solution would be to register unique ALPN
codepoints for each HTTP/3 and QUIC version combination. However, this might
complicate deployment of new versions and deprecation of old ones:
architecturally, an application should provide its ALPN to its QUIC
implementation. In this case, fully deploying a new version in that
implementation would require updating all applications that use it.</t>
      <t>Instead, this document specifies an Alt-Svc parameter that lists the QUIC
versions available to serve the resource. Clients that do not understand this
parameter will ignore it. They might default to the most likely version, and/or
incur a round-trip penalty in the event of a mismatch. Clients that do process
the parameter will connect successfully using the most desirable version with
high probability.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <t>This document uses the Augmented BNF defined in <xref target="RFC5234"/> and imports
<tt>parameter</tt> from <xref section="3" sectionFormat="of" target="ALTSVC"/>.</t>
    </section>
    <section anchor="the-quicv-parameter">
      <name>The quicv Parameter</name>
      <t>This document specifies the "quicv" Alt-Svc parameter, which lists the QUIC
versions supported by an endpoint, using the hexadecimal representation of the
version field in a QUIC long header, as indicated in <xref target="RFC8999"/>. Senders <bcp14>MAY</bcp14>
omit leading zeroes from version numbers.</t>
      <sourcecode type="abnf"><![CDATA[
quicv         = version-list
version-list  = DQUOTE version 1*( OWS, "," OWS version-number) DQUOTE
version = 1*8 HEXDIG; hex-encoded QUIC version
]]></sourcecode>
      <t>Examples:</t>
      <artwork><![CDATA[
Alt-Svc: h3=":443"; quicv="1"
Alt-Svc: h3=":443"; quicv="709a50c4,1"
Alt-Svc: h3=":443"; quicv="709a50c4,1", h3=":1001"; quicv="709a50c4"
]]></artwork>
      <t>The order of entries in version-list reflects the server's preference (with the
first value being the most preferred alternative).</t>
      <t>Note that the quicv parameter applies to a single associated entry in the
Alt-Svc list. Servers <bcp14>MUST NOT</bcp14> provide a quicv parameter to an entry containing
ALPN codepoint that does not potentially utilize QUIC.</t>
      <t>If the Alt-Svc information resolves to a server pool that inconsistently
supports different QUIC versions, the parameter <bcp14>SHOULD</bcp14> only advertise versions
that are supported throughout the pool.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document inherits the security considerations of <xref target="ALTSVC"/>, especially
the implications of "Changing Protocols" in Section 9.3. There are few
protocol properties guaranteed to hold across all QUIC versions, so endpoints
should be aware what capabilities are intrinsic to the QUIC versions they are
advertising.</t>
      <t>This parameter reveals capabilities of the described server, but this
information is already available by inducing the server to generate a QUIC
version negotiation packet.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Please add this entry ot the HTTP Alt-Svc Parameter Registry:</t>
      <t>Alt-Svc Parameter: quicv</t>
      <t>Reference: This document</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="ALTSVC">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="Mike Bishop">
              <organization>Akamai Technologies</organization>
            </author>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="31" month="August" year="2021"/>
            <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="Internet-Draft" value="draft-ietf-httpbis-rfc7838bis-00"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl">
              <organization/>
            </author>
            <author fullname="A. Popov" initials="A." surname="Popov">
              <organization/>
            </author>
            <author fullname="A. Langley" initials="A." surname="Langley">
              <organization/>
            </author>
            <author fullname="E. Stephan" initials="E." surname="Stephan">
              <organization/>
            </author>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="I-D.ietf-quic-http">
          <front>
            <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
            <author fullname="Mike Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="2" month="February" year="2021"/>
            <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.

DO NOT DEPLOY THIS VERSION OF HTTP

   DO NOT DEPLOY THIS VERSION OF HTTP/3 UNTIL IT IS IN AN RFC.  This
   version is still a work in progress.  For trial deployments, please
   use earlier versions.

Note to Readers

   Discussion of this draft takes place on the QUIC working group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/search/?email_list=quic.

   Working Group information can be found at https://github.com/quicwg;
   source code and issues list for this draft can be found at
   https://github.com/quicwg/base-drafts/labels/-http.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-34"/>
        </reference>
        <reference anchor="RFC8999">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8999"/>
          <seriesInfo name="DOI" value="10.17487/RFC8999"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
