<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.8 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bishop-httpbis-grease-01" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.45.3 -->
  <front>
    <title abbrev="GREASE for HTTP/2">GREASE for HTTP/2</title>
    <seriesInfo name="Internet-Draft" value="draft-bishop-httpbis-grease-01"/>
    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Akamai</organization>
      <address>
        <email>mbishop@evequefou.be</email>
      </address>
    </author>
    <date/>
    <area>Applications</area>
    <workgroup>HTTPbis</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>Reserves several values in the HTTP/2 registries to exercise the requirement
that clients and servers ignore unknown values.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="problems" numbered="true" toc="default">
      <name>Introduction</name>
      <t><xref target="UseIt" format="default"/> observes that extension and negotiation
mechanisms which aren't exercised regularly can be found not to work when they
are later employed by an extension to the protocol.
<xref target="GREASE" format="default"/> is one mitigation which originated in TLS,
registering multiple values in various TLS registries which can be sent
prospectively by clients.</t>
      <t>The common requirement of the different spaces described by these documents is
the requirement that recipients ignore unrecognized values.  By reserving a
scattered set of codepoints to have no defined meaning, clients and servers can
inject values from these ranges into connections on a regular basis and exercise
this requirement.</t>
      <t>HTTP/2 <xref target="HTTP2" format="default"/> frame types and settings employ a similar mechanism of
ignoring unknown values. This makes HTTP/2 a good candidate to employ grease on
connections. The need for such a technique was demonstrated recently by an
HTTP/2 implementation which closed the connection upon receipt of an unknown
setting.</t>
    </section>
    <section anchor="using-grease-in-http2" numbered="true" toc="default">
      <name>Using GREASE in HTTP/2</name>
      <section anchor="grease-for-frame-types" numbered="true" toc="default">
        <name>GREASE for Frame Types</name>
        <t>Frame types of the format <tt>0xb + (0x1f * N)</tt> are reserved for use as grease.
These frames have no semantic meaning, and SHOULD be send instead of using
padding on DATA or HEADERS frames where possible.  They MAY also be sent on
connections where there is no application data currently being transferred.
Endpoints MUST NOT consider these frames to have any meaning upon receipt.</t>
        <t>The flags, the payload, and the length of the frames SHOULD be selected
randomly, subject to implementation-defined limits on the length.</t>
        <t><xref target="HTTP2" format="default"/> is ambiguous about whether unknown frame types are permitted on
streams in the "idle", "reserved", "closed", or "half-closed (local)" states.
As a result, some implementations could legitimately consider this to be an
error.  Therefore, these frames SHOULD NOT be sent on streams in those states.</t>
      </section>
      <section anchor="grease-for-settings" numbered="true" toc="default">
        <name>GREASE for SETTINGS</name>
        <t>Settings identifiers of the format <tt>0x?a?a</tt> are reserved for use as grease.
Such settings have no defined meaning.  Endpoints SHOULD include at least one
such setting in their initial SETTINGS frame, and MAY send new SETTINGS frames
during the connection containing additional grease values.  Endpoints MUST NOT
consider such settings to have any meaning upon receipt.</t>
        <t>Because the setting has no defined meaning, the value of the setting SHOULD be
selected randomly.</t>
      </section>
    </section>
    <section anchor="security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The ability to design, implement, and deploy new protocol mechanisms can be
critical to security.</t>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="frame-types" numbered="true" toc="default">
        <name>Frame Types</name>
        <t>This document reserves a range of entries in the "HTTP/2 Frame Type" registry
defined in <xref target="HTTP2" format="default"/>.  Each code of the format <tt>0xb + (0x1f * N)</tt> for values of
N in the range (0..7) (that is, <tt>0xb</tt>, <tt>0x2a</tt>, etc., through <tt>0xe4</tt>) MUST NOT be
assigned by IANA for any purpose.</t>
      </section>
      <section anchor="settings" numbered="true" toc="default">
        <name>Settings</name>
        <t>This document reserves a range of entries in the "HTTP/2 Settings" registry
defined in <xref target="HTTP2" format="default"/>.  Each code of the format <tt>0x?a?a</tt> where each <tt>?</tt> is any
octet (that is, <tt>0x0a0a</tt>, <tt>0x0a1a</tt>, etc. through <tt>0xfafa</tt>) MUST NOT be assigned
by IANA for any purpose.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="HTTP2" target="https://www.rfc-editor.org/info/rfc7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <seriesInfo name="DOI" value="10.17487/RFC7540"/>
            <seriesInfo name="RFC" value="7540"/>
            <author initials="M." surname="Belshe" fullname="M. Belshe">
              <organization/>
            </author>
            <author initials="R." surname="Peon" fullname="R. Peon">
              <organization/>
            </author>
            <author initials="M." surname="Thomson" fullname="M. Thomson" role="editor">
              <organization/>
            </author>
            <date year="2015" month="May"/>
            <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 perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="UseIt" target="http://www.ietf.org/internet-drafts/draft-thomson-use-it-or-lose-it-04.txt">
          <front>
            <title>Long-term Viability of Protocol Extension Mechanisms</title>
            <seriesInfo name="Internet-Draft" value="draft-thomson-use-it-or-lose-it-04"/>
            <author initials="M" surname="Thomson" fullname="Martin Thomson">
              <organization/>
            </author>
            <date month="July" day="7" year="2019"/>
            <abstract>
              <t>The ability to change protocols depends on exercising the extension and version negotiation mechanisms that support change.  Protocols that don't use these mechanisms can find that deploying changes can be difficult and costly.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="GREASE" target="http://www.ietf.org/internet-drafts/draft-ietf-tls-grease-04.txt">
          <front>
            <title>Applying GREASE to TLS Extensibility</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-tls-grease-04"/>
            <author initials="D" surname="Benjamin" fullname="David Benjamin">
              <organization/>
            </author>
            <date month="August" day="22" year="2019"/>
            <abstract>
              <t>This document describes GREASE (Generate Random Extensions And Sustain Extensibility), a mechanism to prevent extensibility failures in the TLS ecosystem.  It reserves a set of TLS protocol values that may be advertised to ensure peers correctly handle unknown values.</t>
            </abstract>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>This draft arose from a discussion in the QUIC WG with Lucas Pardue, Ryan
Hamilton, and Martin Thomson.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
gdchifUtWJP0RrrAa/z4nWYh/gcTZaZ5Kg8AAA==

-->

</rfc>
