<?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.2.6 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>

<rfc ipr="trust200902" docName="draft-kerwin-http2-nak-frame-01" category="std">

  <front>
    <title abbrev="http2-nak-frame">HTTP/2 "Dropped Frame" Frame</title>

    <author initials="M." surname="Kerwin" fullname="Matthew Kerwin">
      <organization></organization>
      <address>
        <email>matthew@kerwin.net.au</email>
        <uri>https://matthew.kerwin.net.au/</uri>
      </address>
    </author>

    <date year="2017"/>

    <area>Applications and Real-Time</area>
    
    <keyword>HTTP</keyword> <keyword>H2</keyword>

    <abstract>


<t>This document defines an extension to the Hypertext Transfer Protocol Version 2 (HTTP/2) that
allows an endpoint to signal to its peer that an unsupported extension frame was discarded.</t>



    </abstract>


    <note title="Note to Readers">


<t>The issues list for this draft can be found at <eref target="https://github.com/phluid61/internet-drafts/labels/HTTP%2F2%20NAK%20Frame">https://github.com/phluid61/internet-drafts/labels/HTTP%2F2%20NAK%20Frame</eref></t>

<t>The most recent (often unpublished) draft is at <eref target="http://phluid61.github.io/internet-drafts/http2-nak-frame/">http://phluid61.github.io/internet-drafts/http2-nak-frame/</eref></t>


    </note>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Out of the box, the Hypertext Transfer Protocol Version 2 (HTTP/2) <xref target="RFC7540"/> makes provision for
extension frames to be sent on a connection, with or without prior agreement from either peer, with
the assertion that “implementations MUST discard frames that have unknown or unsupported types”
(<xref target="RFC7540"/>, Section 5.5).  However it can be useful to explicitly notify the peer if such a frame
is discarded.</t>

<t>This document defines an extension to HTTP/2 that allows a peer to signal that a received frame
was discarded, without altering the stream or connection state (<xref target="RFC7540"/>, Section 5.1), and in
particular without triggering an error condition.</t>

<section anchor="notational-conventions" title="Notational Conventions">

<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>

</section>
</section>
<section anchor="additions" title="Additions to HTTP/2">

<t>This document introduces a new HTTP/2 frame type (<xref target="RFC7540"/>, Section 11.2).</t>

<section anchor="dropped-frame" title="DROPPED_FRAME">

<t>DROPPED_FRAME frames (type code=0xTBA) can be sent on a connection at any time after the
connection preface except in the middle of a header block (<xref target="RFC7540"/>, Section 4.3) to indicate
that a received extension frame was discarded without any other action being taken.</t>

<figure title="DROPPED_FRAME Frame Payload"><artwork><![CDATA[
  +---------------+
  |   Type (8)    |
  +---------------+
]]></artwork></figure>

<t>The DROPPED_FRAME frame contains a single 8-bit integer containing the value of the Type field
from the discarded frame.</t>

<t>The DROPPED_FRAME frame does not define any flags.</t>

<t>An endpoint SHOULD send a DROPPED_FRAME frame for an unknown or unsupported extension frame type
the first time it discards a frame of that type.</t>

<t>An endpoint MAY send a DROPPED_FRAME frame for a particular frame type only once, even if it
discards multiple frames of that type.</t>

<t>An endpoint that receives a DROPPED_FRAME frame ought to take it as an indication that the
extension is not supported by the peer, and MAY subsequently choose not to send further frames of
that type or to attempt extension negotiation with the peer.</t>

<t>Receipt of a DROPPED_FRAME frame does not necessarily mean that all frames on that connection with
the discarded type will be discarded in future.  A transparent intermediary that forwards an
extension frame in one direction and a corresponding DROPPED_FRAME frame in the other direction
MUST NOT intercept future frames of that type and preemptively reply with a DROPPED_FRAME frame.</t>

<t>DROPPED_FRAME frames are not associated with any individual stream.  If a DROPPED_FRAME frame is
received with a stream identifier field value other than 0x0, the recipient MUST respond with a
connection error (<xref target="RFC7540"/>, Section 5.4.1) of type PROTOCOL_ERROR.</t>

<t>Receipt of a DROPPED_FRAME frame with a length field value other than 1 MUST be treated as a
connection error (<xref target="RFC7540"/>, Section 5.4.1) of type FRAME_SIZE_ERROR.</t>

<t>An endpoint MUST NOT send a DROPPED_FRAME frame with a Type of DROPPED_FRAME (0xTBA).  If a
DROPPED_FRAME frame is received with a Type field value of 0xTBA, the recipient MUST respond with
a connection error (<xref target="RFC7540"/>, Section 5.4.1) of type PROTOCOL_ERROR.
<!-- FIXME: what about core frame types / explicitly negotiated ones / etc? --></t>

<t>Extensions that define new HTTP/2 frame types MAY specify behaviours in response to DROPPED_FRAME
frames with those types, however extensions that change the semantics of existing protocol
components, including those defined in this document, MUST be negotiated before being used
(<xref target="RFC7540"/>, Section 5.5).</t>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<t>Receipt of a DROPPED_FRAME frame does not guarantee that the sending peer will send one for
every frame type it drops, and the absence of a DROPPED_FRAME frame does not imply that the peer
has not discarded a frame.  Implementations MUST NOT depend on the use of DROPPED_FRAME frames to
indicate acceptance or rejection of extension frames.</t>

</section>
<section anchor="iana" title="IANA Considerations">

<t>This document updates the registry for frame types in the “Hypertext Transfer Protocol (HTTP) 2
Parameters” section.</t>

<section anchor="http2-frame-type-registry-update" title="HTTP/2 Frame Type Registry Update">

<t>This document updates the “HTTP/2 Frame Type” registry (<xref target="RFC7540"/>, Section 11.2).  The entries
in the following table are registered by this document.</t>

<texttable>
      <ttcol align='left'>Frame Type</ttcol>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Section</ttcol>
      <c>DROPPED_FRAME</c>
      <c>TBD</c>
      <c><xref target="dropped-frame"/></c>
</texttable>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC7540" target='https://www.rfc-editor.org/info/rfc7540'>
<front>
<title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
<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>
<seriesInfo name='RFC' value='7540'/>
<seriesInfo name='DOI' value='10.17487/RFC7540'/>
</reference>



<reference  anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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>




    </references>




  </back>

<!-- ##markdown-source:
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
9/x/kx3+qhqJ5I79F1v5hSB/FgAA

-->

</rfc>

