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

<!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-00" 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>http://matthew.kerwin.net.au/</uri>
      </address>
    </author>

    <date year="2016"/>

    <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 for non-destructive signalling of unsupported extension frames.</t>

<t><spanx style="strong">Note to Readers</spanx></t>

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



    </abstract>


  </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 frame types to be sent on a connection, with or without prior agreement from either or
both peers, 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”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in <xref target="RFC2119"/>.</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 <!-- FIXME --> to
indicate that a received frame was discarded without any 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 frame type the first
time it discards such a frame.</t>

<t>An endpoint MAY send a DROPPED_FRAME frame for a particular incoming 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 to not send further frames of
that type to or to enter into extension negotiations with the peer.</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>

<!--

TODO:

 * warn MUXers about forwarding/coalescing extensions
 * mention the error detection capability

-->

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

<!-- FIXME -->
<t>This specification does not introduce any new security considerations.</t>

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

<t>This document updates the registriy 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='http://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='http://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>




    </references>




  </back>
</rfc>

