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

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

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-bishop-httpbis-priority-placeholder-00" category="std">

  <front>
    <title abbrev="Placeholders in HTTP/2">Priority Placeholders in HTTP/2</title>

    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Microsoft</organization>
      <address>
        <email>michael.bishop@microsoft.com</email>
      </address>
    </author>

    <date />

    <area>Applications</area>
    <workgroup>HTTPbis</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t><xref target="RFC7540"></xref> defines HTTP/2, including a method for communicating priorities.
Some implementations have begun using closed streams as placeholders when
constructing their priority tree, but this has unbounded state commitments and
interacts poorly with HTTP/QUIC (<xref target="I-D.ietf-quic-http"></xref>).  This document proposes
an extension to the HTTP/2 priority scheme for both protocols.</t>



    </abstract>


  </front>

  <middle>


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

<t>Stream Priority is described in <xref target="RFC7540"></xref>, Section 5.3.  Priority is
communicated using PRIORITY frames and with reference to other streams, with
stream 0 being the root of the tree.  Each stream depends on one other stream
with a particular weight; these weights represent relative priorities among the
multiple children of a stream.</t>

<t>Unfortunately, the scheme as specified encourages servers to actively maintain
closed streams in the priority tree, since other streams might reference them
later.  This produces an unbounded state commitment on the part of the server
if it is to correctly reflect any possible reference the client might make.
While priorities are only advisory and the server is free to discard as much
state as it needs to, references to streams which are no longer in the server’s
state are treated as references to the root of the tree.  This can result in
wildly different conceptions of the priority tree between client and server, a
situation which all parties would prefer to avoid.</t>

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

<t>The words “MUST”, “MUST NOT”, “SHOULD”, and “MAY” are used in this document.
It’s not shouting; when they are capitalized, they have the special meaning
defined in <xref target="RFC2119"/>.</t>

</section>
</section>
<section anchor="the-priority-placeholder-extension" title="The Priority Placeholder Extension">

<t>This extension consists of an additional setting <xref target="setting"/>, changes to the set
of HTTP/2 frames <xref target="frames"/>, and modified state management logic on the server
<xref target="logic"/>.</t>

<section anchor="setting" title="Priority Placeholder Setting">

<t>An HTTP/2 peer that supports Priority Placeholders indicates this using the
HTTP/2 <spanx style="verb">SETTINGS_PLACEHOLDERS</spanx> (0xSETTING-TBD) setting.</t>

<t>When a value for the <spanx style="verb">SETTINGS_PLACEHOLDERS</spanx> setting is not set, this indicates
that the peer does not support the extension, and other protocol elements in
this document MUST NOT be used.  A client that supports this extension SHOULD
set this value to 0 (0x00).</t>

<t>A server which supports this extension MUST set this value to a non-zero number
indicating the number of placeholders it is willing to make available to the
client, which MUST be at most 2^31-1.  Clients MUST NOT use the protocol
elements in this document unless the server has indicated support by setting a
non-zero value.</t>

<section anchor="mid-session-updates" title="Mid-session updates">

<t>HTTP/2 permits settings to change during the course of a connection.  This
setting can be freely increased at any time without consequence, and servers
SHOULD NOT reduce the value during the lifetime of a connection.</t>

<t>If a client receives a reduction in the number of permitted placeholders, it
MUST assume that all placeholders over the new limit have been pruned from the
tree and SHOULD immediately issue PRIORITY and PLACEHOLDER_PRIORITY frames as
necessary to rebuild the priority tree as desired.  Once the SETTINGS frame has
been acknowledged, servers should treat the excess placeholders as inactive and
prune them following the same logic in <xref target="logic"/>.</t>

</section>
</section>
<section anchor="frames" title="Frame Modifications">

<section anchor="existing-frame-types" title="Existing Frame Types">

<t>When client and server have opted in to this extension, the HTTP/2 PRIORITY
frame and HEADERS frame contain one additional flag:</t>

<t><list style="hanging">
  <t hangText='DEPENDENT_ON_PLACEHOLDER (0x2):'>
  When set, bit 1 indicates that the value in the Stream Dependency field is a
Placeholder ID rather than a Stream ID.</t>
</list></t>

<t>In HEADERS, this flag MUST NOT be set if the PRIORITY flag is not set.</t>

</section>
<section anchor="placeholderpriority-frame" title="PLACEHOLDER_PRIORITY Frame">

<t>The PLACEHOLDER_PRIORITY (type=0xFRAME-TBD) frame specifies the sender-advised
priority of a placeholder. It MUST be sent only on Stream 0.  The semantics of
the Stream Dependency, Weight, and E flag are the same as in the HTTP/2 PRIORITY
frame.</t>

<t>The flags defined are:</t>

<t><list style="hanging">
  <t hangText='E (0x01):'>
  Indicates that the stream dependency is exclusive (see <xref target="RFC7540"/>, Section
5.3).</t>
  <t hangText='DEPENDENT_ON_PLACEHOLDER (0x2):'>
  When set, bit 1 indicates that the value in the Stream Dependency field is a
Placeholder ID rather than a Stream ID.</t>
</list></t>

<figure title="PRIORITY frame payload" anchor="fig-priority"><artwork type="drawing"><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |0|                    Placeholder ID (31)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |0|                  Stream Dependency (31)                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Weight (8)  |
   +-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The PLACEHOLDER_PRIORITY frame payload has the following fields:</t>

<t><list style="hanging">
  <t hangText='Prioritized Stream:'>
  A 31-bit stream identifier for the request stream whose priority is being
updated.</t>
  <t hangText='Stream Dependency:'>
  A 31-bit stream or placeholder identifier for the request stream that this
stream depends on (see <xref target="RFC7540"/>, Section 5.3).</t>
  <t hangText='Weight:'>
  An unsigned 8-bit integer representing a priority weight for the stream (see
<xref target="RFC7540"/>, Section 5.3). Add one to the value to obtain a weight between
1 and 256.</t>
</list></t>

<t>A PLACEHOLDER_PRIORITY frame MUST have a payload length of nine octets.  A
PLACEHOLDER_PRIORITY frame of any other length MUST be treated as a connection
error of type PROTOCOL_ERROR if the sender has advertised support for this
extension, and ignored otherwise.</t>

</section>
</section>
<section anchor="logic" title="Priority Management Logic">

<t>This extension provides a mechanism for servers to limit how many
additional IDs which do not refer to an active request will be used to maintain
priority state.  Because the server commits to maintain these inactive IDs,
clients can use them with confidence that the server will not have discarded
the state without warning.</t>

<t>In exchange, the server knows it can aggressively prune inactive regions from
the priority tree, because placeholders will be used to “root” any persistent
structure of the tree which the client cares about retaining.  For
prioritization purposes, a node in the tree is considered “inactive” when the
corresponding stream has been closed for at least two round-trip times (using
any reasonable estimate available on the server).  This delay helps mitigate
race conditions where the server has pruned a node the client believed was still
active and used as a Stream Dependency.</t>

<t>Specifically, the server MAY at any time:</t>

<t><list style="symbols">
  <t>Identify and discard branches of the tree containing only inactive nodes
(i.e. a node with only other inactive nodes as descendants, along with those
descendants)</t>
  <t>Identify and condense interior regions of the tree containing only inactive
nodes, allocating weight appropriately</t>
</list></t>

<figure title="Example of Priority Tree Pruning" anchor="fig-pruning"><artwork type="drawing"><![CDATA[
    x                x                 x
    |                |                 |
    P                P                 P
   / \               |                 |
  I   I     ==>      I      ==>        A
     / \             |                 |
    A   I            A                 A
    |                |
    A                A
]]></artwork></figure>

<t>In the example in <xref target="fig-pruning"/>, <spanx style="verb">P</spanx> represents a Placeholder, <spanx style="verb">A</spanx> represents
an active node, and <spanx style="verb">I</spanx> represents an inactive node.  In the first step, the
server discards two inactive branches (each a single node).  In the second step,
the server condenses an interior inactive node.  Note that these transformations
will result in no change in the resources allocated to a particular active
stream.</t>

<t>Clients MUST assume the server is actively performing such pruning and MUST NOT
declare a dependency on a stream it knows to have been closed.</t>

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

<t>This extension is believed to improve security relative to <xref target="RFC7540"></xref>, as it
helps to constrain a previously unbounded state commitment.</t>

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

<t>This document registers one new frame type and one new setting.</t>

<section anchor="settingsplaceholders-setting" title="SETTINGS_PLACEHOLDERS Setting">

<t>The <spanx style="verb">SETTINGS_PLACEHOLDERS</spanx> setting is registered in the “HTTP/2 Settings”
registry established in <xref target="RFC7540"></xref>.</t>

<t><list style="hanging">
  <t hangText='Name:'>
  SETTINGS_PLACEHOLDERS</t>
  <t hangText='Code:'>
  0xSETTING-TBD</t>
  <t hangText='Initial Value:'>
  not set</t>
  <t hangText='Specification:'>
  This document.</t>
</list></t>

</section>
<section anchor="placeholderpriority-frame-1" title="PLACEHOLDER_PRIORITY Frame">

<t>The <spanx style="verb">PLACEHOLDER_PRIORITY</spanx> frame is registered in the “HTTP/2 Frames” registry
established in <xref target="RFC7540"></xref>.</t>

<t><list style="hanging">
  <t hangText='Name:'>
  PLACEHOLDER_PRIORITY</t>
  <t hangText='Code:'>
  0xFRAME-TBD</t>
  <t hangText='Specification:'>
  This document.</t>
</list></t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





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



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




    </references>

    <references title='Informative References'>





<reference anchor="I-D.ietf-quic-http">
<front>
<title>Hypertext Transfer Protocol (HTTP) over QUIC</title>

<author initials='M' surname='Bishop' fullname='Mike Bishop'>
    <organization />
</author>

<date month='June' day='13' year='2017' />

<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 QUIC.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-quic-http-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-quic-http-04.txt' />
</reference>




    </references>




  </back>

<!-- ##markdown-source:
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
NXUBRomJqFN2j3GEDt/UBoNV6jRpBlgDXF0hvGWZW9ZGDHSmxHVOU1ux/AXz
dMEZIfadCOExX9QAH71HSiKCsvpuVQjCOaruFAJiF1eUMQO7rcDSazcWtba7
HdEOkXk5GlIgjvoC7qgG5bq6lQ6nmZ5xB3g+uh5dno8u795cXbYDOUW8J8dY
MlDMJ4fxCWBztpFiopIF/BGzsSc556Ie/rNSSJewCaTQ1Iu28974XHnNoR20
KMfEzeNzcZO8FifmEOJ7I8JThLVSaa2hR4vW6aeJNHtxykapK6W9K45KWOzb
0/cvboYXI0mOotu6E6gjYU4jDC5zDWMqgpv9v4W/EzUum8AcpDiHY1EGip0T
By56h+ICTQ+VM5Tl9qi2p77n9kdC1EhE5/K2Bq9u+o39mDmpZaetQdVFGWgw
PtCocfI7O+Y5Ag1Odqy/0cWxwRmwSYbqA1g+CnBuqfCoFaU6KvaiMuxAQyqZ
VanfRCNx8Efj8Xchstv5T/OjaLK15FqWqJyq3Z+zPc+e7Hn2tCZxhtdP1efq
mfpCfam+Ul//nmdM5M/9//EPU/n19Nc9bG5r6ujp2fG+Zdj//+Zl16qPMvOH
8oK/4nLq6KvjR2m3YYIeYKAOp3bWX+c7GrF+e7CZLNHqrTKn04MPHw1HG2u5
8CKQr9MWgztE541NAvVjUWPRiYYKhSD5T3Rem1LTiL2+KfA9lT+hWbGcu9BK
2fAenu8IcKVwS6Mb79jmkUNxUCsufgIP0cGppqNTd8dHj8eadpgRA9ZM0dwk
2BlFva+YOxoN0vSgmSjJyLMRXSZODY+RCzpa2PrI+WqYppyLY8vZ9AVuwmla
18TjoEAInnF0f/Lsi9iAfAQXnFe4hNANRjKTz8o55SE03qgtktKUgdqibucj
lLiFXsXGK5Kos1ZreNIubdEzeO+4XKWciVRzdXf1/OrVm9HNzdVNnaclUTJy
kSyNL21o9QyiVbLwVgcICznUhsLQEntiPG631BfrZvwVF20Ph1Kx7ZkVoNG5
B+ICD7OppbBhwae3ZnmxUnZLavNX3U6rghqf1yOn1HGlsZ7M5HEG2KCXura6
HZXWrZ4MrifDNEyATb4zia5bsVgQyhQvtDfG0WdTxIKZXt36yZQq0ljI0BYm
mpJ3JaaVtWMXS7wR/wyaOIGj+kWgTSOOuiVaap/XI4ExTbulEeu1yVFNzs0q
MaFnM0+dHY9DpcZuWPZmxuUydR1y2PY4P2pi8y5gS5MHNKk7kCEl3qPQhgZ4
BI0+qvKmPcSL5mpNLiEq2X9CwnlDiiXxlHrhfGOaeEWjisrzoL/HLXzaVBdM
mUaDNHoCj+DroBbyoJmO0Yzd47DC5XyBEmMG+cBE5oE8ISb4wTwZ2lIYaYlu
iea5/dLbgrvToI54okO3DTSi1QFYpO4fKLMLHm02A4GNOdT64sJkeqXmJito
ulzaGTZ1Ox4qJgkE3Xzl4jcwSIzGNjGK31LjxOD3PV4taTxewkTgr+muxFYc
KXbyAkPpVsroBE3ragNLF8Mf2q15TGl9NZY8IZPkemY88TpP4BUbFo/dD2mc
a+wGfSRCTCJH9gSOF6Vib5FynOPe5obYoibgHoU5QYHmzLKppPQoFFtLjvdw
THpGDDKcZwhkjS98CuvxUpHYofMzF0dHMW/ogm6kvDTrHy1X32+XSTsP1HtZ
uVN97ZZjv8ZCevv5zgN1zSv/ov71aTTHSv4q9e23f5Xn8nX9nRMZ/96m+iif
wzWZSGFn5fAx2dcUttfvL/kqtmGs+EbvNd2GkqWbpHVH5r6WdVL7jfM4upDF
PHloEaOq4u3123V9Qr7Vqszxdth+y3eTLRxLPn073qSQb4IdASOyMbWeKzBT
9CSURfeMnhc4UDV7Gz88MnTDp+lea5YJzeM10WDIDYRqzDV1thPviBxFD9lm
7dKV61RGqQ6nhnjlLZf/lCiaqxq6EopTwxi28cpVnu/NxIckn2zcM9YO17oZ
3BibNhO39l1Wc/2HfEQMcbSvkrmqkUC6rycYdAmSZNSv63b77PLmPpJSqeRU
cLce2Um+iFclqDArRtLzmIOaSVSIb/bVP1zAx8AN2nZBBREbRog1t6h42bpG
5su4bkcyCN8Y0r281K4A0711VYD0j19FRqbHw8vhLsMWBdya2WbgTAESUKFB
Zi4zTKlRucrk64H4uH1rgcJw7xVFfdlSd1mfcJFRn1/fihl1EKcpkVY4QBLl
RX5FyRgZ2Ib51h08c3WpOZMN9vPGGAPEecXGjYzEBeRn1J7/pK6Bl8QR10Ya
5f9RQi/vtm7vpFb+zSHY231L3kaNf1QZTCYcqFoTqOE/SRX7DtzSRDN8+1RR
6T9TTHTyrtv5LzlfMP3VJAAA

-->

</rfc>

