<?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 comments="yes"?>
<?rfc sortrefs="yes"?>
<?rfc strict="yes"?>
<?rfc symrefs="yes"?>
<?rfc toc="yes"?>

<rfc ipr="trust200902" docName="draft-yasskin-http-origin-signed-responses-00" category="std">

  <front>
    <title>Origin-signed HTTP Responses</title>

    <author initials="J." surname="Yasskin" fullname="Jeffrey Yasskin">
      <organization>Google</organization>
      <address>
        <email>jyasskin@chromium.org</email>
      </address>
    </author>

    <date year="2017" month="August" day="31"/>

    <area>gen</area>
    <workgroup>http</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document explores how a server can send particular responses that are
authoritative for an origin, when the server itself is not authoritative for
that origin. For now, it focuses on the constraints covering any such mechanism.</t>



    </abstract>


    <note title="Note to Readers">


<t>Discussion of this draft takes place on the HTTP working group mailing list
(ietf-http-wg@w3.org), which is archived
at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/">https://lists.w3.org/Archives/Public/ietf-http-wg/</eref>.</t>

<t>The source code and issues list for this draft can be found
in <eref target="https://github.com/WICG/webpackage">https://github.com/WICG/webpackage</eref>.</t>


    </note>


  </front>

  <middle>


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

<t>When
I
<eref target="https://datatracker.ietf.org/doc/minutes-99-dispatch/">presented Web Packaging to DISPATCH</eref>,
folks thought it would make sense to split it into a way to sign individual HTTP
responses as coming from a particular origin, and separately a way to bundle a
collection of HTTP responses. This document explores the constraints on any
method of signing HTTP responses and briefly sketches a possible solution to the
constraints.</t>

</section>
<section anchor="terminology" title="Terminology">

<t><list style="hanging">
  <t hangText='Author'>
  The entity that controls the server for a particular origin <xref target="RFC6454"/>. The
author can get a CA to issue certificates for their private keys and can run a
TLS server for their origin.</t>
  <t hangText='Intermediate'>
  An entity that fetches signed HTTP responses from an author or another
intermediate and forwards them to another intermediate or a client.</t>
  <t hangText='Client'>
  An entity that uses a signed HTTP response and needs to be able to prove that
the author vouched for it as coming from its claimed origin.</t>
</list></t>

<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 anchor="use-cases" title="Use cases">

<section anchor="uc-pushed-subresources" title="PUSHed subresources">

<t>To reduce round trips, a server might use HTTP/2 PUSH to inject a subresource
from another server into the client’s cache. If anything about the subresource
is expired or can’t be verified, the client would fetch it from the original
server.</t>

<t>For example, if <spanx style="verb">https://example.com/index.html</spanx> includes</t>

<figure><artwork type="html"><![CDATA[
<script src="https://jquery.com/jquery-1.2.3.min.js">
]]></artwork></figure>

<t>Then to avoid the need to look up and connect to <spanx style="verb">jquery.com</spanx> in the critical
path, <spanx style="verb">example.com</spanx> might PUSH that resource (<xref target="RFC7540"/>, section 8.2), signed
by <spanx style="verb">jquery.com</spanx>.</t>

</section>
<section anchor="uc-explicit-cdn" title="Explicit use of a CDN for subresources">

<t>In order to speed up loading but still maintain control over its content, an
HTML page in a particular origin <spanx style="verb">O.com</spanx> could tell clients to load its
subresources from an intermediate CDN that’s not authoritative, but require that
those resources be signed by <spanx style="verb">O.com</spanx> so that the CDN couldn’t modify the
resources.</t>

<figure><artwork type="html"><![CDATA[
<img logicalsrc="https://O.com/img.png"
     physicalsrc="https://cdn.com/O.com/img.png">
]]></artwork></figure>

<t>To make it easier to configure the right CDN for a given request, computation of
the <spanx style="verb">physicalsrc</spanx> could be encapsulated in a custom element:</t>

<figure><artwork type="html"><![CDATA[
<cdn-img src="https://O.com/img.png"></cdn-img>
]]></artwork></figure>

<t>where the <spanx style="verb">&lt;cdn-img&gt;</spanx> implementation generates an appropriate <spanx style="verb">&lt;img&gt;</spanx> based on,
for example, a <spanx style="verb">&lt;meta name="cdn-base"&gt;</spanx> tag elsewhere in the page.</t>

<t>This could be used for some of the same purposes as SRI (<xref target="uc-sri"/>).</t>

</section>
<section anchor="uc-sri" title="Subresource Integrity">

<t>The W3C WebAppSec group is investigating
<eref target="https://github.com/mikewest/signature-based-sri">using signatures</eref> in <xref target="SRI"/>.
They need a way to transmit the signature with the response, which this proposal
could provide.</t>

<t>However, their needs also differ in some significant ways:</t>

<t><list style="numbers">
  <t>The <spanx style="verb">integrity="ed25519-[public-key]"</spanx> attribute and CSP-based ways of
expressing a public key don’t need the signing key to be also trusted to sign
arbitrary content for an origin.</t>
  <t>Some uses of SRI want to constrain subresources to be vouched for by a
third-party, rather than just being signed by the subresource’s author.</t>
</list></t>

<t>While we can design this system to cover both origin-trusted and simple-key
signatures, we should check that this is better than having two separate systems
for the two kinds of signatures.</t>

<t>Note that while the current proposal for SRI describes signing only the content
of a
resource,
<eref target="https://github.com/mikewest/signature-based-sri/issues/5">they may need to sign its name as well, to prevent security vulnerabilities</eref>.
The details of what they need to sign will affect whether and how they can use
this proposal.</t>

</section>
<section anchor="uc-offline-websites" title="Offline websites">

<t>See <eref target="https://github.com/WICG/webpackage">https://github.com/WICG/webpackage</eref> and
<xref target="I-D.yasskin-dispatch-web-packaging"/>. This use requires origin-signed
resources to be bundled.</t>

</section>
</section>
<section anchor="requirements-and-open-questions" title="Requirements and open questions">

<section anchor="proof-of-origin" title="Proof of origin">

<t>To verify that a thing came from a particular origin, for use in the same
context as a TLS connection, we need someone to vouch for the signing key with
as much verification as the signing keys used in TLS. The obvious way to do this
is to re-use the web PKI and CA ecosystem.</t>

<t>We’ll improve adoption if we can re-use existing TLS server certificates, but if
the risks of doing that are too high, we could define a new Extended Key Usage
(<xref target="RFC5280"/>, section 4.2.1.12) that requires CAs to issue new keys for this
purpose. The rest of this document will assume we can re-use existing TLS server
certificates.</t>

<t>It’s essential that an attacker who can convince the server to sign some
resource, cannot cause those signed bytes to be interpreted as something else.
As a result, signatures here need to use the same format as TLS’s signatures,
specified in <xref target="I-D.ietf-tls-tls13"/> section 4.4.3, with a context string that’s
specific to this use.</t>

<section anchor="certificate-chain" title="The certificate and its chain">

<t>The client needs to be able to find the certificate vouching for the signing key
and a chain from that certificate to a trusted root. One approach would be to
include the certificate and its chain in the signature metadata itself, but this
wastes bytes when the same certificate is used for multiple HTTP responses. If
we decide to put the signature in an HTTP header, certificates are also
unusually large for that context.</t>

<t>Another option is to pass a URL that the client can fetch to retrieve the
certificate and chain. To avoid extra round trips in fetching that URL, it could
be <xref target="uc-offline-websites">bundled</xref> with the signed content
or <xref target="uc-pushed-subresources">PUSHed</xref> with it.</t>

</section>
</section>
<section anchor="how-much-to-sign" title="How much to sign">

<t>The previous <xref target="I-D.thomson-http-content-signature"/> and
<xref target="I-D.burke-content-signature"/> schemes signed just the content, while
(<xref target="I-D.cavage-http-signatures"/> could also sign the response headers and the
request method and path. However, the same path, response headers, and content
may mean something very different when retrieved from a different server, so
this document expects to include the whole URL in the signed data as well.</t>

<t>The question of whether to include other request headers—primarily the
<spanx style="verb">accept*</spanx> family—is still open. These headers need to be represented so that
clients wanting a different language, say, can avoid using the wrong-language
response, but it’s not obvious that there’s a security vulnerability if an
attacker can spoof them. That said, it’s always safer to include everything in
the signature.</t>

<t>In order to allow multiple clients to consume the same signed response, the
response shouldn’t include the exact headers that any particular client sends.
For example, a Japanese resource wouldn’t include</t>

<figure><artwork type="http"><![CDATA[
accept-language: ja-JP, ja;q=0.9, en;q=0.8, zh;q=0.7, *;q=0.5
]]></artwork></figure>

<t>Instead, it would probably include just</t>

<figure><artwork type="http"><![CDATA[
accept-language: ja-JP, ja
]]></artwork></figure>

<t>and clients would use the same matching logic as
for <eref target="https://tools.ietf.org/html/rfc7540#section-8.2">PUSH_PROMISE</eref> frame
headers.</t>

<t>The rest of this document will assume that all request headers are included in
the signature.</t>

</section>
<section anchor="response-lifespan" title="Response lifespan">

<t>A normal HTTPS response is authoritative only for one client, for as long as its
cache headers say it should live. A signed response can be re-used for many
clients, and if it was generated while a server was compromised, it can continue
compromising clients even if their requests happen after the server recovers.
This signing scheme needs to mitigate that risk.</t>

<section anchor="certificate-revocation" title="Certificate revocation">

<t>Certificates are mis-issued and private keys are stolen, and in response clients
need to be able to stop trusting these certificates as promptly as possible.
Online revocation
checks <eref target="https://www.imperialviolet.org/2012/02/05/crlsets.html">don’t work</eref>, so
the industry has moved to pushed revocation lists and stapled OCSP responses
<xref target="RFC6066"/>.</t>

<t>Pushed revocation lists work as-is to block trust in the certificate signing a
response, but the signatures need an explicit strategy to staple OCSP responses.
One option is to extend the certificate download (<xref target="certificate-chain"/>) to
include the OCSP response too, perhaps in the
<eref target="https://tlswg.github.io/tls13-spec/draft-ietf-tls-tls13.html#ocsp-and-sct">TLS 1.3 CertificateEntry</eref> format.</t>

</section>
<section anchor="downgrade" title="Response downgrade attacks">

<t>The signed content in a response might be vulnerable to attacks, such as XSS, or
might simply be discovered to be incorrect after publication. Once the author
fixes those vulnerabilities or mistakes, clients should stop trusting the old
signed content in a reasonable amount of time. Similar to certificate
revocation, I expect the best option to be stapled “this version is still valid”
assertions with short expiration times.</t>

<t>These assertions could be structured as:</t>

<t><list style="numbers">
  <t>A signed minimum version number or timestamp for a set of request headers:
This requires that signed responses need to include a version number or
timestamp, but allows a server to provide a single signature covering all
valid versions.</t>
  <t>A replacement for the whole response’s signature. This requires the author to
separately re-sign each valid version and requires each version to include a
strong validator <xref target="RFC7232"/>, but allows intermediates to serve less data.</t>
  <t>A replacement for the response’s signature and an update for the embedded
<spanx style="verb">expires</spanx> and related cache-control HTTP headers <xref target="RFC7234"/>. This naturally
extends authors’ intuitions about cache expiration and the existing cache
revalidation behavior to signed responses. However, it also requires that the
update procedure for the response headers on the client must produce
something that’s bytewise identical to the updated headers on the server.</t>
</list></t>

<t>The signature also needs to include instructions to intermediates for how to
fetch updated validity assertions.</t>

</section>
</section>
<section anchor="conveying-the-signed-headers" title="Conveying the signed headers">

<t>HTTP headers are traditionally munged by proxies, making it impossible to
guarantee that the client will see the same sequence of bytes as the author
wrote. In the HTTPS world, we have more end-to-end header integrity, but it’s
still likely that there are enough TLS-terminating proxies that the author’s
signatures would tend to break before getting to the client.</t>

<t>Since proxies don’t modify unknown content types, I expect to propose an
<spanx style="verb">application/http2</spanx> format to serialize the request headers, response headers,
and body so they can be signed. This could be as simple as a series of HTTP/2
frames, or could</t>

<t><list style="numbers">
  <t>Allow longer contiguous bodies than
<eref target="https://tools.ietf.org/html/rfc7540#section-4.2">HTTP/2’s 16MB frame limit</eref>, and</t>
  <t>Use better compression than <xref target="RFC7541"/> for the non-confidential headers.</t>
</list></t>

<t>To help the PUSHed subresources use case (<xref target="uc-pushed-subresources"/>), we might
also want to extend the <spanx style="verb">PUSH_PROMISE</spanx> frame type to include a signature, and
then there might be some way to include the request headers directly in that
frame.</t>

</section>
</section>
<section anchor="straw-proposal" title="Straw proposal">

<t>TBD</t>

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

<t>Authors MUST NOT include confidential information in a signed response that an
untrusted intermediate could forward, since the response is only signed and not
encrypted. Intermediates can read the content.</t>

<t>Relaxing the requirement to consult DNS when determining authority for an origin
means that an attacker who possesses a valid certificate no longer needs to be
on-path to redirect traffic to them; instead of modifying DNS, they need only
convince the user to visit another Web site in order to serve responses signed
as the target. This consideration and mitigations for it are shared by
<xref target="I-D.ietf-httpbis-origin-frame"/>.</t>

<t>Signing a bad response can affect more users than simply serving a bad response,
since a served response will only affect users who make a request while the bad
version is live, while an attacker can forward a signed response until its
signature expires. Authors should consider shorter signature expiration times
than they use for cache expiration times.</t>

</section>
<section anchor="privacy-considerations" title="Privacy considerations">

<t>Normally, when a client fetches <spanx style="verb">https://o1.com/resource.js</spanx>,
<spanx style="verb">o1.com</spanx> learns that the client is interested in the resource. If
<spanx style="verb">o1.com</spanx> signs <spanx style="verb">resource.js</spanx>, <spanx style="verb">o2.com</spanx> serves it as
<spanx style="verb">https://o2.com/o1resource.js</spanx>, and the client fetches it from there,
then <spanx style="verb">o2.com</spanx> learns that the client is interested, and if the client
executes the Javascript, that could also report the client’s interest back to
<spanx style="verb">o1.com</spanx>.</t>

<t>Often, <spanx style="verb">o2.com</spanx> already knew about the client’s interest, because it’s the
entity that directed the client to <spanx style="verb">o1resource.js</spanx>, but there may be cases where
this leaks extra information.</t>

<t>For non-executable resource types, a signed response can improve the privacy
situation by hiding the client’s interest from the original author.</t>

</section>
<section anchor="iana-considerations" title="IANA considerations">

<t>This document has no actions for IANA.</t>

</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="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>

    <references title='Informative References'>





<reference anchor="SRI"
           target='http://www.w3.org/TR/2016/REC-SRI-20160623'>
<front>
<title>Subresource Integrity</title>

<author initials='D.' surname='Akhawe' fullname='Devdatta Akhawe'>
    <organization />
</author>

<author initials='F.' surname='Braun' fullname='Frederik Braun'>
    <organization />
</author>

<author initials='F.' surname='Marier' fullname='Francois Marier'>
    <organization />
</author>

<author initials='J.' surname='Weinberger' fullname='Joel Weinberger'>
    <organization />
</author>

<date month='June' day='23' year='2016' />
</front>

<seriesInfo name='World Wide Web Consortium Recommendation' value='REC-SRI-20160623' />
<format type='HTML' target='http://www.w3.org/TR/2016/REC-SRI-20160623' />
</reference>



<reference  anchor="RFC6454" target='https://www.rfc-editor.org/info/rfc6454'>
<front>
<title>The Web Origin Concept</title>
<author initials='A.' surname='Barth' fullname='A. Barth'><organization /></author>
<date year='2011' month='December' />
<abstract><t>This document defines the concept of an &quot;origin&quot;, which is often used as the scope of authority or privilege by user agents.  Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites.  In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string.  It also defines an HTTP header field, named &quot;Origin&quot;, that indicates which origins are associated with an HTTP request.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6454'/>
<seriesInfo name='DOI' value='10.17487/RFC6454'/>
</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="I-D.yasskin-dispatch-web-packaging">
<front>
<title>Web Packaging</title>

<author initials='J' surname='Yasskin' fullname='Jeffrey Yasskin'>
    <organization />
</author>

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

<abstract><t>Web Packages provide a way to bundle up groups of web resources to transmit them together.  These bundles can then be signed to establish their authenticity.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-yasskin-dispatch-web-packaging-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-yasskin-dispatch-web-packaging-00.txt' />
</reference>



<reference  anchor="RFC5280" target='https://www.rfc-editor.org/info/rfc5280'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author initials='D.' surname='Cooper' fullname='D. Cooper'><organization /></author>
<author initials='S.' surname='Santesson' fullname='S. Santesson'><organization /></author>
<author initials='S.' surname='Farrell' fullname='S. Farrell'><organization /></author>
<author initials='S.' surname='Boeyen' fullname='S. Boeyen'><organization /></author>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<author initials='W.' surname='Polk' fullname='W. Polk'><organization /></author>
<date year='2008' month='May' />
<abstract><t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5280'/>
<seriesInfo name='DOI' value='10.17487/RFC5280'/>
</reference>



<reference anchor="I-D.ietf-tls-tls13">
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<date month='July' day='3' year='2017' />

<abstract><t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t></abstract>

</front>

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



<reference anchor="I-D.thomson-http-content-signature">
<front>
<title>Content-Signature Header Field for HTTP</title>

<author initials='M' surname='Thomson' fullname='Martin Thomson'>
    <organization />
</author>

<date month='July' day='2' year='2015' />

<abstract><t>A Content-Signature header field is defined for use in HTTP.  This header field carries a signature of the payload body of a message.</t></abstract>

</front>

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



<reference anchor="I-D.burke-content-signature">
<front>
<title>HTTP Header for digital signatures</title>

<author initials='B' surname='Burke' fullname='Bill Burke'>
    <organization />
</author>

<date month='March' day='7' year='2011' />

<abstract><t>This document describes the Content-Signature HTTP entity header.  It is used to transmit one or more digital signatures comprised of metadata and the HTTP message body.</t></abstract>

</front>

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



<reference anchor="I-D.cavage-http-signatures">
<front>
<title>Signing HTTP Messages</title>

<author initials='M' surname='Cavage' fullname='Mark Cavage'>
    <organization />
</author>

<author initials='M' surname='Sporny' fullname='Manu Sporny'>
    <organization />
</author>

<date month='July' day='17' year='2017' />

<abstract><t>When communicating over the Internet using the HTTP protocol, it can be desirable for a server or client to authenticate the sender of a particular message.  It can also be desirable to ensure that the message was not tampered with during transit.  This document describes a way for servers and clients to simultaneously add authentication and message integrity to HTTP messages by using a digital signature.</t></abstract>

</front>

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



<reference  anchor="RFC6066" target='https://www.rfc-editor.org/info/rfc6066'>
<front>
<title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><organization /></author>
<date year='2011' month='January' />
<abstract><t>This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, &quot;The Transport Layer Security (TLS) Protocol Version 1.2&quot;.  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6066'/>
<seriesInfo name='DOI' value='10.17487/RFC6066'/>
</reference>



<reference  anchor="RFC7232" target='https://www.rfc-editor.org/info/rfc7232'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems.  This document defines HTTP/1.1 conditional requests, including metadata header fields for indicating state changes, request header fields for making preconditions on such state, and rules for constructing the responses to a conditional request when one or more preconditions evaluate to false.</t></abstract>
</front>
<seriesInfo name='RFC' value='7232'/>
<seriesInfo name='DOI' value='10.17487/RFC7232'/>
</reference>



<reference  anchor="RFC7234" target='https://www.rfc-editor.org/info/rfc7234'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t></abstract>
</front>
<seriesInfo name='RFC' value='7234'/>
<seriesInfo name='DOI' value='10.17487/RFC7234'/>
</reference>



<reference  anchor="RFC7541" target='https://www.rfc-editor.org/info/rfc7541'>
<front>
<title>HPACK: Header Compression for HTTP/2</title>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='H.' surname='Ruellan' fullname='H. Ruellan'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</t></abstract>
</front>
<seriesInfo name='RFC' value='7541'/>
<seriesInfo name='DOI' value='10.17487/RFC7541'/>
</reference>



<reference anchor="I-D.ietf-httpbis-origin-frame">
<front>
<title>The ORIGIN HTTP/2 Frame</title>

<author initials='M' surname='Nottingham' fullname='Mark Nottingham'>
    <organization />
</author>

<author initials='E' surname='Nygren' fullname='Erik Nygren'>
    <organization />
</author>

<date month='August' day='23' year='2017' />

<abstract><t>This document specifies the ORIGIN frame for HTTP/2, to indicate what origins are available on a given connection.  Note to Readers  Discussion of this draft takes place on the HTTP working group mailing list (ietf-http-wg@w3.org), which is archived at https://lists.w3.org/Archives/Public/ietf-http-wg/.  Working Group information can be found at http://httpwg.github.io/; source code and issues list for this draft can be found at https://github.com/httpwg/http-extensions/labels/origin-frame.</t></abstract>

</front>

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




    </references>


<section anchor="acknowledgements" title="Acknowledgements">

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

