<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.12 -->
<?rfc comments="yes"?>
<?rfc sortrefs="yes"?>
<?rfc strict="yes"?>
<?rfc symrefs="yes"?>
<?rfc toc="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wpack-use-cases-00" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" sortRefs="true" symRefs="true" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.10.0 -->
  <front>
    <title>Use Cases and Requirements for Web Packages</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wpack-use-cases-00"/>
    <author initials="J." surname="Yasskin" fullname="Jeffrey Yasskin">
      <organization>Google</organization>
      <address>
        <email>jyasskin@chromium.org</email>
      </address>
    </author>
    <author initials="F." surname="Erias" fullname="Felipe Erias">
      <organization>Igalia</organization>
      <address>
        <email>felipeerias@igalia.com</email>
      </address>
    </author>
    <date year="2021" month="October" day="25"/>
    <abstract>
      <t>This document lists use cases for signing and/or bundling collections
of web pages, and extracts a set of requirements from them.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Web Packaging Working Group mailing list (wpack@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wpack/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/wpack-wg/use-cases"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>People would like to use content offline and in other situations where
there isn't a direct connection to the server where the content
originates. However, it's difficult to distribute and verify the
authenticity of applications and content without a connection to the
network. The W3C has addressed running applications offline with
Service Workers (<xref target="ServiceWorkers" format="default"/>), but not the problem of
distribution.</t>
      <t>Previous attempts at packaging web resources
(e.g.
<eref target="https://www.mnot.net/blog/2010/02/18/resource_packages">Resource Packages</eref> and
the
<eref target="https://w3ctag.github.io/packaging-on-the-web/">W3C TAG's packaging proposal</eref>)
were motivated by speeding up the download of resources from a single server,
which is probably better achieved through other mechanisms like HTTP/2 PUSH,
possibly augmented with
a
<eref target="https://lists.w3.org/Archives/Public/public-web-perf/2015Jan/0038.html">simple manifest of URLs a page plans to use</eref>.
This attempt is instead motivated by avoiding a connection to the origin server
at all. It may still be useful for the earlier use cases, so they're still
listed, but they're not primary.</t>
    </section>
    <section anchor="use-cases" numbered="true" toc="default">
      <name>Use cases</name>
      <t>These use cases are in rough descending priority order. If use cases
have conflicting requirements, the design should enable more important
use cases.</t>
      <section anchor="essential-use-cases" numbered="true" toc="default">
        <name>Essential</name>
        <section anchor="offline-installation" numbered="true" toc="default">
          <name>Offline installation</name>
          <t>Alex can download a file containing a website
(a <eref target="https://developers.google.com/web/progressive-web-apps/checklist">PWA</eref>)
including a Service Worker from origin <tt>O</tt>, and transmit it to their peer Bailey,
and then Bailey can install the Service Worker with a proof that it came from <tt>O</tt>.
This saves Bailey the bandwidth costs of transferring the website.</t>
          <t>There are roughly two ways to accomplish this:</t>
          <ol spacing="normal" type="1"><li>Package just the Service Worker Javascript and any other Javascript that it
<eref target="https://w3c.github.io/ServiceWorker/#importscripts">importScripts()</eref>, with
their URLs and enough metadata to synthesize a
<eref target="https://w3c.github.io/ServiceWorker/#navigator-service-worker-register">navigator.serviceWorker.register(scriptURL, options)
call</eref>,
along with an uninterpreted but signature-checked blob of data that the
Service Worker can interpret to fill in its caches.</li>
            <li>Package the resources so that the Service Worker can fetch() them to populate
its cache.</li>
          </ol>
          <t>Associated requirements for just the Service Worker:</t>
          <ul spacing="normal">
            <li>
              <xref target="urls" format="title"/>: The <tt>register()</tt> and <tt>importScripts()</tt> calls have
semantics that depend on the URL.</li>
            <li>
              <xref target="signing" format="title"/>: To prove that the file came from <tt>O</tt>.</li>
            <li>
              <xref target="existing-certs" format="title"/>: So <tt>O</tt> doesn't have to spend lots of
money buying a specialized certificate.</li>
            <li>
              <xref target="crypto-agility" format="title"/>: Today's algorithms will eventually be
obsolete and will need to be replaced.</li>
            <li>
              <xref target="revocation" format="title"/>: <tt>O</tt>'s certificate might be compromised or
mis-issued, and the attacker shouldn't then get an infinite ability to mint
packages.</li>
            <li>
              <xref target="no-downgrades" format="title"/>: <tt>O</tt>'s site might have an XSS
vulnerability, and attackers with an old signed package shouldn't be able to
take advantage of the XSS forever.</li>
            <li>
              <xref target="metadata" format="title"/>: Just enough to generate the <tt>register()</tt> call,
which is less than a full W3C Application Manifest.</li>
          </ul>
          <t>Additional associated requirements for packaged resources:</t>
          <ul spacing="normal">
            <li>
              <xref target="urls" format="title"/>: Resources on the web are addressed by URL.</li>
            <li>
              <xref target="request-headers" format="title"/>: If Bailey's running a different browser
from Alex or has a different language configured, the <tt>accept*</tt> headers are
important for selecting which resource to use at each URL.</li>
            <li>
              <xref target="response-headers" format="title"/>: The meaning of a resource is heavily
influenced by its HTTP response headers.</li>
            <li>
              <xref target="multiple-origins" format="title"/>: So the site can
be <xref target="libraries" format="default">built from multiple components</xref>.</li>
            <li>
              <xref target="metadata" format="title"/>: The browser needs to know which resource within
a package file to treat as its Service Worker and/or initial HTML page.</li>
          </ul>
          <section anchor="online-use" numbered="true" toc="default">
            <name>Online use</name>
            <t>Bailey may have an internet connection through which they can, in real time,
fetch updates to the package they received from Alex.</t>
          </section>
          <section anchor="fully-offline-use" numbered="true" toc="default">
            <name>Fully offline use</name>
            <t>Or Bailey may not have any internet connection a significant fraction of the
time, either because they have no internet at all, because they turn off
internet except when intentionally downloading content, or because they use up
their plan partway through each month.</t>
            <t>Associated requirements beyond <xref target="offline-installation" format="title"/>:</t>
            <ul spacing="normal">
              <li>
                <xref target="packaged-validity" format="title"/>: Even without a direct internet
connection, Bailey should be able to check that their package is still valid.</li>
            </ul>
          </section>
        </section>
        <section anchor="offline-browsing" numbered="true" toc="default">
          <name>Offline browsing</name>
          <t>Alex can download a file containing a large website (e.g. Wikipedia) from its
origin, save it to transferrable storage (e.g. an SD card), and hand it to their
peer Bailey. Then Bailey can browse the website with a proof that it came from
<tt>O</tt>. Bailey may not have the storage space to copy the website before browsing
it.</t>
          <t>This use case is harder for publishers to support if we specialize
<xref target="offline-installation" format="default"/> for Service Workers since it requires the publisher to
adopt Service Workers before they can sign their site.</t>
          <t>Associated requirements beyond <xref target="offline-installation" format="title"/>:</t>
          <ul spacing="normal">
            <li>
              <xref target="random-access" format="title"/>: To avoid needing a long linear scan before
using the content.</li>
            <li>
              <xref target="stored-compression" format="title"/>: So that more content can fit on the
same storage device.</li>
          </ul>
        </section>
        <section anchor="snapshot" numbered="true" toc="default">
          <name>Save and share a web page</name>
          <t>Casey is viewing a web page and wants to save it either for offline use or to
show it to their friend Dakota. Since Casey isn't the web page's publisher, they
don't have the private key needed to sign the page. Browsers currently allow
their users to save pages, but each browser uses a different format (MHTML, Web
Archive, or files in a directory), so Dakota and Casey would need to be using
the same browser. Casey could also take a screenshot, at the cost of losing
links and accessibility.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="unsigned-content" format="title"/>: A client can't sign content as another
origin.</li>
            <li>
              <xref target="multiple-origins" format="title"/>: General web pages include resources
from multiple origins.</li>
            <li>
              <xref target="urls" format="title"/>: Resources on the web are addressed by URL.</li>
            <li>
              <xref target="response-headers" format="title"/>: The meaning of a resource is heavily
influenced by its HTTP response headers.</li>
          </ul>
        </section>
        <section anchor="private-prefetch" numbered="true" toc="default">
          <name>Privacy-preserving prefetch</name>
          <t>Lots of websites link to other websites. Many of these source sites would like
the targets of these links to load quickly. The source could use <tt>&lt;link
rel="prefetch"&gt;</tt> to prefetch the target of a link, but if the user doesn't
actually click that link, that leaks the fact that the user saw a page that
linked to the target. This can be true even if the prefetch is made without
browser credentials because of mechanisms like TLS session IDs.</t>
          <t>Because clients have limited data budgets to prefetch link targets, this use
case is probably limited to sites that can accurately predict which link their
users are most likely to click. For example, search engines can predict that
their users will click one of the first couple results, and news aggreggation
sites like Reddit or Slashdot can hope that users will read the article if
they've navigated to its discussion.</t>
          <t>Two search engines have built systems to do this with today's technology:
Google's <eref target="https://www.ampproject.org/">AMP</eref> and Baidu's
<eref target="https://www.mipengine.org/">MIP</eref> formats and caches allow them to prefetch
search results while preserving privacy, at the cost of showing the wrong URLs
for the results once the user has clicked. A good solution to this problem would
show the right URLs but still avoid a request to the publishing origin until
after the user clicks.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="signing" format="title"/>: To prove the content came from the original
origin.</li>
            <li>
              <xref target="streamed-loading" format="title"/>: If the user clicks before the target
page is fully transferred, the browser should be able to start loading early
parts before the source site finishes sending the whole page.</li>
            <li>
              <xref target="transfer-compression" format="title"/></li>
            <li>
              <xref target="subsetting" format="title"/>: If a prefetched page includes subresources,
its publisher might want to provide and sign both WebP and PNG versions of an
image, but the source site should be able to transfer only best one for each
client.</li>
          </ul>
        </section>
      </section>
      <section anchor="nice-to-have-use-cases" numbered="true" toc="default">
        <name>Nice-to-have</name>
        <section anchor="uc-web-pub" numbered="true" toc="default">
          <name>Packaged Web Publications</name>
          <t>The
<eref target="https://www.w3.org/publishing/groups/publ-wg/">W3C's Publishing Working Group</eref>,
merged from the International Digital Publishing Forum (IDPF) and in charge of
EPUB maintenance, wants to be able to create publications on the web and then
let them be copied to different servers or to other users via arbitrary
protocols. See
their <eref target="https://www.w3.org/TR/pwp-ucr/#pwp">Packaged Web Publications use cases</eref>
for more details.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="urls" format="title"/>: Resources on the web are addressed by URL.</li>
            <li>
              <xref target="signing" format="title"/>: So that readers can be sure their copy is
authentic and so that copying the package preserves the URLs of the content
inside it.</li>
            <li>
              <xref target="no-downgrades" format="title"/>: An early version of a publication might
contain incorrect content, and a publisher should be able to update that
without worrying that an attacker can still show the old content to users.</li>
            <li>
              <xref target="metadata" format="title"/>: A publication can have copyright and licensing
concerns; a title, author, and cover image; an ISBN or DOI name; etc.; which
should be included when that publication is packaged.</li>
          </ul>
          <t>Other requirements are similar to those from
<xref target="offline-installation" format="title"/>:</t>
          <ul spacing="normal">
            <li>
              <xref target="random-access" format="title"/>: To avoid needing a long linear scan before
using the content.</li>
            <li>
              <xref target="stored-compression" format="title"/>: So that more content can fit on the
same storage device.</li>
            <li>
              <xref target="request-headers" format="title"/>: If different users' browsers have
different capabilities or preferences, the <tt>accept*</tt> headers are important for
selecting which resource to use at each URL.</li>
            <li>
              <xref target="response-headers" format="title"/>: The meaning of a resource is heavily
influenced by its HTTP response headers.</li>
            <li>
              <xref target="existing-certs" format="title"/>: So a publisher doesn't have to spend lots
of money buying a specialized certificate.</li>
            <li>
              <xref target="crypto-agility" format="title"/>: Today's algorithms will eventually be
obsolete and will need to be replaced.</li>
            <li>
              <xref target="revocation" format="title"/>: The publisher's certificate might be
compromised or mis-issued, and an attacker shouldn't then get an infinite
ability to mint packages.</li>
          </ul>
        </section>
        <section anchor="anti-censorship" numbered="true" toc="default">
          <name>Avoiding Censorship</name>
          <t>Some users want to retrieve resources that their governments or network
providers don't want them to see. Right now, it's straightforward for someone in
a privileged network position to block access to particular hosts, but TLS makes
it difficult to block access to particular resources on those hosts.</t>
          <t>Today it's straightforward to retrieve blocked content from a third party, but
there's no guarantee that the third-party has sent the user an accurate
representation of the content: the user has to trust the third party.</t>
          <t>With signed web packages, the user can re-gain assurance that the content is
authentic, while still bypassing the censorship. Packages don't do anything to
help discover this content.</t>
          <t>Systems that make censorship more difficult can also make legitimate content
filtering more difficult. Because the client that processes a web package always
knows the true URL, this forces content filtering to happen on the client
instead of on the network.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="urls" format="title"/>: So the user can see that they're getting the
content they expected.</li>
            <li>
              <xref target="signing" format="title"/>: So that readers can be sure their copy is
authentic and so that copying the package preserves the URLs of the content
inside it.</li>
          </ul>
        </section>
        <section anchor="security-review" numbered="true" toc="default">
          <name>Third-party security review</name>
          <t>Some users may want to grant certain permissions only to applications that have
been reviewed for security by a trusted third party. These third parties could
provide guarantees similar to those provided by the iOS, Android, or Chrome OS
app stores, which might allow browsers to offer more powerful capabilities than
have been deemed safe for unaudited websites.</t>
          <t>Binary transparency for websites is similar: like with Certificate Transparency
<xref target="RFC6962" format="default"/>, the transparency logs would sign the content of the package to
provide assurance that experts had a chance to audit the exact package a client
received.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="additional-signatures" format="title"/></li>
          </ul>
        </section>
        <section anchor="libraries" numbered="true" toc="default">
          <name>Building packages from multiple libraries</name>
          <t>Large programs are built from smaller components. In the case of the web,
components can be included either as Javascript files or as <tt>&lt;iframe&gt;</tt>d
subresources. In the first case, the packager could copy the JS files to their
own origin; but in the second, it may be important for the <tt>&lt;iframe&gt;</tt>d resources
to be able to make
<eref target="https://html.spec.whatwg.org/multipage/origin.html#same-origin">same-origin</eref>
requests back to their own origin, for example to implement federated sign-in.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="multiple-origins" format="title"/>: Each component may come from its own origin.</li>
            <li>
              <xref target="deduplication" format="title"/>: If we have dependencies A-&gt;B-&gt;D and
A-&gt;C-&gt;D, it's important that a request for a D resource resolves to a single
resource that both B and C can handle.</li>
          </ul>
          <section anchor="shared-libraries" numbered="true" toc="default">
            <name>Shared libraries</name>
            <t>In ecosystems like <eref target="https://electron.atom.io/">Electron</eref>
and <eref target="https://nodejs.org/en/">Node</eref>, many packages may share some common
dependencies. The cost of downloading each package can be greatly reduced if the
package can merely point at other dependencies to download instead of including
them all inline.</t>
            <t>Associated requirements:</t>
            <ul spacing="normal">
              <li>
                <xref target="external-dependencies" format="title"/></li>
            </ul>
          </section>
        </section>
        <section anchor="cross-cdn-serving" numbered="true" toc="default">
          <name>Cross-CDN Serving</name>
          <t>When a web page has subresources from a different origin, retrieval of those
subresources can be optimized if they're transferred over the same connection as
the main resource. If both origins are distributed by the same CDN, in-progress
mechanisms like <xref target="I-D.ietf-httpbis-http2-secondary-certs" format="default"/> allow the server to
use a single connection to send both resources, but if the resource and
subresource don't share a CDN or don't use a CDN at all, existing mechanisms
don't help.</t>
          <t>If the subresource is signed by its publisher, the main resource's server can
forward it to the client.</t>
          <t>There are some yet-to-be-solved privacy problems if the client and server want
to avoid transferring subresources that are already in the client's cache:
naively telling the server that a resource is already present is a privacy leak.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="streamed-loading" format="title"/>: To get optimal performance, the browser
should be able to start loading early parts of a resource before the
distributor finishes sending the whole resource.</li>
            <li>
              <xref target="signing" format="title"/>: To prove the content came from the original
origin.</li>
            <li>
              <xref target="transfer-compression" format="title"/></li>
          </ul>
        </section>
        <section anchor="preinstall" numbered="true" toc="default">
          <name>Pre-installed applications</name>
          <t>Device manufacturers would like to ship their devices with some web applications
pre-installed and usable even if the application is first used without an
internet connection. Thereafter, the application should use the normal Service
Worker update mechanism to stay up to date.</t>
          <t>One way to accomplish this would be to pre-create a browser profile in the
device's default browser and navigate it to each of the pre-installed apps
before recording the device image. However, this means end-users miss the
browser's initial setup flow and possibly that any "unique" cookies the sites
set are now shared across everyone who bought the device. It also doesn't help
users who change their default browser.</t>
          <t>If multiple browsers supported an unsigned web package format, with an option to
trust it as if it were signed if it's in a particular section of the filesystem
that's as protected as the browser's executable, and if registering a Service
Worker from a page inside a package passed the full package contents to the
Service Worker's <tt>install</tt> event, the device manufacturer could provide web
packages for each pre-installed application that would work in the user's chosen
browser.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="service-worker-integration" format="title"/>: To pass the package into the
<tt>install</tt> event and from there get its contents into a <tt>Cache</tt>.</li>
          </ul>
        </section>
        <section anchor="compromised-frontend" numbered="true" toc="default">
          <name>Protecting Users from a Compromised Frontend</name>
          <t>If an attacker gains control over a frontend server, any user who visits that
server while they have control can have their web app upgraded to a hostile
version. On the other hand, native applications either control their own update
process or delegate it to an app store, which allows them to protect users by
requiring that updates are signed by a trusted key. This protection isn't
perfect---it's a Trust-On-First-Use mechanism that doesn't protect users who
first install the application while the attacker controls the server they get it
from, and attackers can bypass it by compromising the app's build system---but
since both of those risks also apply to web apps, it does make the attack
surface for native applications smaller than for web apps.</t>
          <t>Not all application developers should choose to require signed updates, since
doing so adds the risk of losing the signing key, but having this option gives
security-sensitive applications like <eref target="https://app.dashlane.com/">Dashlane</eref> an
incentive to build native apps instead of web apps.</t>
          <t>It has been difficult to add a signature requirement for web app upgrades
because we haven't had a way to sign web resources. Web Packaging is expected to
provide that, so we'll be able to consider the best way to do it.</t>
          <t>Both HTTP Strict Transport Security (HSTS, <xref target="RFC6797" format="default"/>) and HTTP Public Key
Pinning (HPKP, <xref target="RFC7469" format="default"/>) have established ways to pin assertions about a
site's security for a bounded time after a visit. We could do the same with a
web app's signing key.</t>
          <t>Note that HPKP <eref target="https://groups.google.com/a/chromium.org/d/topic/blink-dev/he9tr7p3rZ8/discussion">has been turned off in
Chromium</eref>
because it was difficult to use and made it too easy to "brick" a website. To
reduce the chance of bricking the website, this key pinning design could require
an active Service Worker before enforcing the pins. It could also avoid the need
for users to take manual action to recover from a lost signing key by allowing a
new key to be used if it's seen consistently for a site-chosen amount of time,
instead of waiting for the whole pin to expire. However, these mitigations don't
guarantee that browsers would find the tradeoffs more acceptable than they did
for HPKP.</t>
          <t>One can think of a CDN as a potentially-compromised frontend and use this
mechanism to limit the damage it can cause. However, this doesn't make it safe
to use a wholly-untrustworthy CDN because of the risk to first-time users.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="non-origin-signatures" format="title"/>: To let a backend system vouch for
the content. This would likely be augmented with origin trust by receiving the
signed content over TLS.</li>
            <li>
              <xref target="streamed-loading" format="title"/>: To get optimal performance, the browser
should be able to start loading early parts of a resource before the
server finishes sending the whole resource.</li>
          </ul>
        </section>
        <section anchor="self-extracting" numbered="true" toc="default">
          <name>Installation from a self-extracting executable</name>
          <t>The Node and Electron communities would like to install packages using
self-extracting executables. The traditional way to design a
self-extracting executable is to concatenate the package to the end of
the executable, have the executable look for a length at its own end,
and seek backwards from there for the start of the package.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="trailing-length" format="title"/></li>
          </ul>
        </section>
        <section anchor="version-control" numbered="true" toc="default">
          <name>Packages in version control</name>
          <t>Once packages are generated, they should be stored in version control. Many
popular VC systems auto-detect text files in order to "fix" their line endings.
If the first bytes of a package look like text, while later bytes store binary
data, VC may break the package.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="binary" format="title"/></li>
          </ul>
        </section>
        <section anchor="bundling" numbered="true" toc="default">
          <name>Subresource bundling</name>
          <t>Text based subresources often benefit from improved compression ratios when
bundled together.</t>
          <t>At the same time, the current practice of JS and CSS bundling, by compiling
everything into a single JS file, also has negative side-effects:</t>
          <ol spacing="normal" type="1"><li>Dependent execution - in order to start executing <em>any</em> of the bundled
resources, it is required to download, parse and execute <em>all</em> of them.</li>
            <li>Loss of caching granularity - Modification of <em>any</em> of the resources results
in caching invalidation of <em>all</em> of them.</li>
            <li>Loss of module semantics - ES6 modules must be delivered as independent
resources. Therefore, current bundling methods, which deliver them with other
resources under a common URL, require transpilation to ES5 and result in loss
of ES6 module semantics.</li>
          </ol>
          <t>An on-the-fly readable packaging format, that will enable resources to maintain
their own URLs while being physically delivered with other resources, can
resolve the above downsides while keeping the upsides of improved compression
ratios.</t>
          <t>To improve cache granularity, the client needs to tell the server which versions
of which resources are already cached, which it could do with a Service Worker
or perhaps with <xref target="I-D.ietf-httpbis-cache-digest" format="default"/>.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="urls" format="title"/></li>
            <li>
              <xref target="streamed-loading" format="title"/>: To solve downside 1.</li>
            <li>
              <xref target="transfer-compression" format="title"/>: To keep the upside.</li>
            <li>
              <xref target="response-headers" format="title"/>: At least the Content-Type is needed to
load JS and CSS.</li>
            <li>
              <xref target="unsigned-content" format="title"/>: Signing same-origin content wastes
space.</li>
          </ul>
        </section>
        <section anchor="archival" numbered="true" toc="default">
          <name>Archival</name>
          <t>Existing formats like WARC (<xref target="ISO28500" format="default"/>) do a good job of accurately
representing the state of a web server at a particular time, but a browser can't
currently use them to give a person the experience of that website at the time
it was archived. It's not obvious to the author of this draft that a new
packaging format is likely to improve on WARC, compared to, for example,
implementing support for WARC in browsers, but folks who know about archiving
seem interested, e.g.:
<eref target="https://twitter.com/anjacks0n/status/950861384266416134">https://twitter.com/anjacks0n/status/950861384266416134</eref>.</t>
          <t>Because of the time scales involved in archival, any signatures from the
original host would likely not be trusted anymore by the time the archive is
viewed, so implementations would need to sandbox the content instead of running
it on the original origin.</t>
          <t>Associated requirements:</t>
          <ul spacing="normal">
            <li>
              <xref target="urls" format="title"/></li>
            <li>
              <xref target="response-headers" format="title"/>: To accurately record the server's
response.</li>
            <li>
              <xref target="unsigned-content" format="title"/>: To deal with expired signatures.</li>
            <li>
              <xref target="timeshifting" format="title"/></li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="requirements" numbered="true" toc="default">
      <name>Requirements</name>
      <section anchor="essential-reqs" numbered="true" toc="default">
        <name>Essential</name>
        <section anchor="urls" numbered="true" toc="default">
          <name>Indexed by URL</name>
          <t>Resources should be keyed by URLs, matching how browsers look
resources up over HTTP.</t>
        </section>
        <section anchor="request-headers" numbered="true" toc="default">
          <name>Request headers</name>
          <t>Resource keys should include request headers like <tt>accept</tt> and
<tt>accept-language</tt>, which allows content-negotiated resources to be
represented.</t>
          <t>This would require an extension to <xref target="MHTML" format="default"/>, which uses the <tt>content-location</tt>
response header to encode the requested URL, but has no way to encode other
request headers. MHTML also has no instructions for handling multiple resources
with the same <tt>content-location</tt>.</t>
          <t>This also requires an extension to <xref target="ZIP" format="default"/>: we'd need to encode the request
headers into ZIP's filename fields.</t>
        </section>
        <section anchor="response-headers" numbered="true" toc="default">
          <name>Response headers</name>
          <t>Resources should include their HTTP response headers, like
<tt>content-type</tt>, <tt>content-encoding</tt>, <tt>expires</tt>,
<tt>content-security-policy</tt>, etc.</t>
          <t>This requires an extension to <xref target="ZIP" format="default"/>: we'd need something like <xref target="JAR" format="default"/>'s
<tt>META-INF</tt> directory to hold extra metadata beyond the resource's body.</t>
        </section>
        <section anchor="signing" numbered="true" toc="default">
          <name>Signing as an origin</name>
          <t>Resources within a package are provably from an entity with the ability to serve
HTTPS requests for those resources' origin <xref target="RFC6454" format="default"/>.</t>
          <t>Note that previous attempts to sign HTTP messages
(<xref target="I-D.thomson-http-content-signature" format="default"/>, <xref target="I-D.burke-content-signature" format="default"/>, and
<xref target="I-D.cavage-http-signatures" format="default"/>) omit a description of how a client should use a
signature to prove that a resource comes from a particular origin, and they're
probably not usable for that purpose.</t>
          <t>This would require an extension to the <xref target="ZIP" format="default"/> format, similar to <xref target="JAR" format="default"/>'s
signatures.</t>
          <t>In any cryptographic system, the specification is responsible to make correct
implementations easier to deploy than incorrect implementations
(<xref target="easy-implementation" format="default"/>).</t>
        </section>
        <section anchor="random-access" numbered="true" toc="default">
          <name>Random access</name>
          <t>When a package is stored on disk, the browser can access
arbitrary resources without a linear scan.</t>
          <t><xref target="MHTML" format="default"/> would need to be extended with an index of the byte offsets of each
contained resource.</t>
        </section>
        <section anchor="multiple-origins" numbered="true" toc="default">
          <name>Resources from multiple origins in a package</name>
          <t>A package from origin <tt>A</tt> can contain resources from origin <tt>B</tt>
authenticated at the same level as those from <tt>A</tt>.</t>
        </section>
        <section anchor="crypto-agility" numbered="true" toc="default">
          <name>Cryptographic agility</name>
          <t>Obsolete cryptographic algorithms can be replaced.</t>
          <t>Planning to upgrade the cryptography also means we should include some way to
know when it's safe to remove old cryptography (<xref target="crypto-removal" format="default"/>).</t>
        </section>
        <section anchor="unsigned-content" numbered="true" toc="default">
          <name>Unsigned content</name>
          <t>Alex can create their own package without a CA-signed
certificate, and Bailey can view the content of the package.</t>
        </section>
        <section anchor="revocation" numbered="true" toc="default">
          <name>Certificate revocation</name>
          <t>When a package is signed by a revoked certificate, online browsers
can detect this reasonably quickly.</t>
        </section>
        <section anchor="no-downgrades" numbered="true" toc="default">
          <name>Downgrade prevention</name>
          <t>Attackers can't cause a browser to trust an older, vulnerable
version of a package after the browser has seen a newer version.</t>
        </section>
        <section anchor="metadata" numbered="true" toc="default">
          <name>Metadata</name>
          <t>Metadata like that found in the W3C's Application Manifest
<xref target="W3C.WD-appmanifest-20170828" format="default"/> can help a client know how to load and display
a package.</t>
        </section>
        <section anchor="easy-implementation" numbered="true" toc="default">
          <name>Implementations are hard to get wrong</name>
          <t>The design should incorporate aspects that tend to cause incorrect
implementations to get noticed quickly, and avoid aspects that are easy to
implement incorrectly. For example:</t>
          <ul spacing="normal">
            <li>Explicitly specifying a cryptographic algorithm identifier in <xref target="RFC7515" format="default"/>
made it easy for implementations to trust that algorithm,
which
<eref target="https://paragonie.com/blog/2017/03/jwt-json-web-tokens-is-bad-standard-that-everyone-should-avoid">caused vulnerabilities</eref>.</li>
            <li>
              <xref target="ZIP" format="default"/>'s duplicate specification of filenames makes it easy for
implementations to
<eref target="https://nakedsecurity.sophos.com/2013/07/10/anatomy-of-a-security-hole-googles-android-master-key-debacle-explained/">check the signature of one copy but use the other</eref>.</li>
            <li>Following
<eref target="https://blog.gerv.net/2016/09/introducing-deliberate-protocol-errors-langleys-law/">Langley's Law</eref> when
possible makes it hard to deploy incorrect implementations.</li>
          </ul>
        </section>
      </section>
      <section anchor="nice-to-have-reqs" numbered="true" toc="default">
        <name>Nice to have</name>
        <section anchor="streamed-loading" numbered="true" toc="default">
          <name>Streamed loading</name>
          <t>The browser can load a package as it downloads.</t>
          <t>This conflicts with ZIP, since ZIP's index is at the end.</t>
        </section>
        <section anchor="non-origin-signatures" numbered="true" toc="default">
          <name>Signing without origin trust</name>
          <t>It's possible to sign a resource with a key that has some effect on trust other
than asserting that the origin's owner vouches for it. These keys could be
expressed as raw public keys or as certificates with other key usages.</t>
        </section>
        <section anchor="additional-signatures" numbered="true" toc="default">
          <name>Additional signatures</name>
          <t>Third-parties can vouch for packages by signing them.</t>
        </section>
        <section anchor="binary" numbered="true" toc="default">
          <name>Binary</name>
          <t>The format is identified as binary by tools that might try to "fix"
line endings.</t>
          <t>This conflicts with using an <xref target="MHTML" format="default"/>-based format.</t>
        </section>
        <section anchor="deduplication" numbered="true" toc="default">
          <name>Deduplication of diamond dependencies</name>
          <t>Nested packages that have multiple dependency routes to the same
sub-package, can be transmitted and stored with only one copy of that
sub-package.</t>
        </section>
        <section anchor="crypto-removal" numbered="true" toc="default">
          <name>Old crypto can be removed</name>
          <t>The ecosystem can identify when an obsolete cryptographic algorithm is
no longer needed and can be removed.</t>
        </section>
        <section anchor="transfer-compression" numbered="true" toc="default">
          <name>Compress transfers</name>
          <t>Transferring a package over the network takes as few bytes as possible. This is
an easier problem than <xref target="stored-compression" format="title"/> since it doesn't
have to preserve <xref target="random-access" format="title"/>.</t>
        </section>
        <section anchor="stored-compression" numbered="true" toc="default">
          <name>Compress stored packages</name>
          <t>Storing a package on disk takes as few bytes as possible.</t>
        </section>
        <section anchor="subsetting" numbered="true" toc="default">
          <name>Subsetting and reordering</name>
          <t>Resources can be removed from and reordered within a package, without
breaking <xref target="signing" format="default">signatures</xref>.</t>
        </section>
        <section anchor="packaged-validity" numbered="true" toc="default">
          <name>Packaged validity information</name>
          <t><xref target="revocation" format="title"/> and <xref target="no-downgrades" format="title"/>
information can itself be packaged or included in other packages.</t>
        </section>
        <section anchor="existing-certs" numbered="true" toc="default">
          <name>Signing uses existing TLS certificates</name>
          <t>A "normal" TLS certificate can be used for signing packages. Avoiding
extra requirements like "code signing" certificates makes packaging
more accessible to all sites.</t>
        </section>
        <section anchor="external-dependencies" numbered="true" toc="default">
          <name>External dependencies</name>
          <t>Sub-packages can be "external" to the main package, meaning the browser
will need to either fetch them separately or already have them.
(<eref target="https://github.com/WICG/webpackage/issues/35">#35, App Installer Story</eref>)</t>
        </section>
        <section anchor="trailing-length" numbered="true" toc="default">
          <name>Trailing length</name>
          <t>The package's length in bytes appears a fixed offset from the end of
the package.</t>
          <t>This conflicts with <xref target="MHTML" format="default"/>.</t>
        </section>
        <section anchor="timeshifting" numbered="true" toc="default">
          <name>Time-shifting execution</name>
          <t>In some unsigned packages, Javascript time-telling functions should return the
timestamp of the package, rather than the true current time.</t>
          <t>We should explore if this has security implications.</t>
        </section>
        <section anchor="service-worker-integration" numbered="true" toc="default">
          <name>Service Worker integration</name>
          <t>When a web page inside a package registers a Service Worker, that Service
Worker's <tt>install</tt> event should receive a reference to the full package, with a
way to copy the package's contents into a <tt>Cache</tt> object.
(<xref target="ServiceWorkers" format="default"/>)</t>
        </section>
      </section>
    </section>
    <section anchor="non-goals" numbered="true" toc="default">
      <name>Non-goals</name>
      <t>Some features often come along with packaging and signing, and it's
important to explicitly note that they don't appear in the list of
<xref target="requirements" format="title"/>.</t>
      <section anchor="confidential" numbered="true" toc="default">
        <name>Store confidential data</name>
        <t>Packages are designed to hold public information and to be shared to
people with whom the original publisher never has an interactive
connection. In that situation, there's no way to keep the contents
confidential: even if they were encrypted, to make the data public,
anyone would have to be able to get the decryption key.</t>
        <t>It's possible to maintain something similar to confidentiality for
non-public packaged data, but doing so complicates the format design
and can give users a false sense of security.</t>
        <t>We believe we'll cause fewer privacy breaches if we omit any mechanism
for encrypting data, than if we include something and try to teach
people when it's unsafe to use.</t>
      </section>
      <section anchor="streamed-generation" numbered="true" toc="default">
        <name>Generate packages on the fly</name>
        <t>See discussion at <eref target="https://github.com/WICG/webpackage/issues/6#issuecomment-275746125">WICG/webpackage#6</eref>.</t>
      </section>
      <section anchor="non-origin-identity" numbered="true" toc="default">
        <name>Non-origin identity</name>
        <t>A package can be primarily identified as coming from something other
than a
<eref target="https://html.spec.whatwg.org/multipage/browsers.html#concept-origin">Web Origin</eref>.</t>
      </section>
      <section anchor="drm" numbered="true" toc="default">
        <name>DRM</name>
        <t>Special support for blocking access to downloaded content based on
licensing. Note that DRM systems can be shipped inside the package
even if the packaging format doesn't specifically support them.</t>
      </section>
      <section anchor="push-replacement" numbered="true" toc="default">
        <name>Ergonomic replacement for HTTP/2 PUSH</name>
        <t>HTTP/2 PUSH (<xref target="RFC7540" format="default"/>, section 8.2) is hard for developers to configure, and
an explicit package format might be easier. However, experts in this area
believe we should focus on improving PUSH directly instead of routing around it
with a bundling format.</t>
        <t>Trying to bundle resources in order to speed up page loads has a long history,
including
<eref target="https://www.mnot.net/blog/2010/02/18/resource_packages">Resource Packages</eref> from
2010 and
the
<eref target="https://w3ctag.github.io/packaging-on-the-web/">W3C TAG's packaging proposal</eref>
from 2015.</t>
        <t>However, the HTTPWG is doing a lot of work to let servers optimize the PUSHed
data, and packaging would either have to re-do that or accept lower performance.
For example:</t>
        <ul spacing="normal">
          <li>
            <xref target="I-D.vkrasnov-h2-compression-dictionaries" format="default"/> should allow individual small
resources to be compressed as well as they would be in a bundle.</li>
          <li>
            <xref target="I-D.ietf-httpbis-cache-digest" format="default"/> tells the server which resources it doesn't
need to PUSH.</li>
        </ul>
        <t>Associated requirements:</t>
        <ul spacing="normal">
          <li>
            <xref target="streamed-loading" format="title"/>: If the whole package has to be
downloaded before the browser can load a piece, this will definitely be slower
than PUSH.</li>
          <li>
            <xref target="transfer-compression" format="title"/>: Keep up with
<xref target="I-D.vkrasnov-h2-compression-dictionaries" format="default"/>.</li>
          <li>
            <xref target="urls" format="title"/>: Resources on the web are addressed by URL.</li>
          <li>
            <xref target="request-headers" format="title"/>:
<eref target="http://httpwg.org/specs/rfc7540.html#PUSH_PROMISE">PUSH_PROMISE</eref>
(<xref target="RFC7540" format="default"/>, section 6.6) includes request headers.</li>
          <li>
            <xref target="response-headers" format="title"/>: PUSHed resources include their response
headers.</li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The security considerations will depend on the solution designed to satisfy the
above requirements. See <xref target="I-D.yasskin-dispatch-web-packaging" format="default"/> for one possible
set of security considerations.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Informative References</name>
      <reference anchor="ISO28500" target="https://www.iso.org/standard/68004.html">
        <front>
          <title>WARC file format</title>
          <author>
            <organization/>
          </author>
          <date year="2017"/>
        </front>
        <seriesInfo name="ISO" value="28500:2017"/>
      </reference>
      <reference anchor="JAR" target="https://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html">
        <front>
          <title>JAR File Specification</title>
          <author>
            <organization/>
          </author>
          <date year="2014"/>
        </front>
      </reference>
      <reference anchor="MHTML">
        <front>
          <title>MIME Encapsulation of Aggregate Documents, such as HTML (MHTML)</title>
          <author fullname="J. Palme" initials="J." surname="Palme">
            <organization/>
          </author>
          <author fullname="A. Hopmann" initials="A." surname="Hopmann">
            <organization/>
          </author>
          <author fullname="N. Shelness" initials="N." surname="Shelness">
            <organization/>
          </author>
          <date month="March" year="1999"/>
          <abstract>
            <t>This document a) defines the use of a MIME multipart/related structure to aggregate a text/html root resource and the subsidiary resources it references, and b) specifies a MIME content-header (Content-Location) that allow URIs in a multipart/related text/html root body part to reference subsidiary resources in other body parts of the same multipart/related structure.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2557"/>
        <seriesInfo name="DOI" value="10.17487/RFC2557"/>
      </reference>
      <reference anchor="ServiceWorkers" target="https://w3c.github.io/ServiceWorker/">
        <front>
          <title>Service Workers Nightly</title>
          <author>
            <organization/>
          </author>
          <date/>
        </front>
        <seriesInfo name="W3C" value="ED"/>
      </reference>
      <reference anchor="ZIP" target="https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT">
        <front>
          <title>APPNOTE.TXT - .ZIP File Format Specification</title>
          <author>
            <organization/>
          </author>
          <date year="2014" month="October" day="01"/>
        </front>
      </reference>
      <reference anchor="RFC6962">
        <front>
          <title>Certificate Transparency</title>
          <author fullname="B. Laurie" initials="B." surname="Laurie">
            <organization/>
          </author>
          <author fullname="A. Langley" initials="A." surname="Langley">
            <organization/>
          </author>
          <author fullname="E. Kasper" initials="E." surname="Kasper">
            <organization/>
          </author>
          <date month="June" year="2013"/>
          <abstract>
            <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves.  The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
            <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6962"/>
        <seriesInfo name="DOI" value="10.17487/RFC6962"/>
      </reference>
      <reference anchor="I-D.ietf-httpbis-http2-secondary-certs">
        <front>
          <title>Secondary Certificate Authentication in HTTP/2</title>
          <author fullname="Mike Bishop">
            <organization>Akamai</organization>
          </author>
          <author fullname="Nick Sullivan">
            <organization>Cloudflare</organization>
          </author>
          <author fullname="Martin Thomson">
            <organization>Mozilla</organization>
          </author>
          <date day="14" month="May" year="2020"/>
          <abstract>
            <t>   A use of TLS Exported Authenticators is described which enables
   HTTP/2 clients and servers to offer additional certificate-based
   credentials after the connection is established.  The means by which
   these credentials are used with requests is defined.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-http2-secondary-certs-06"/>
      </reference>
      <reference anchor="RFC6797">
        <front>
          <title>HTTP Strict Transport Security (HSTS)</title>
          <author fullname="J. Hodges" initials="J." surname="Hodges">
            <organization/>
          </author>
          <author fullname="C. Jackson" initials="C." surname="Jackson">
            <organization/>
          </author>
          <author fullname="A. Barth" initials="A." surname="Barth">
            <organization/>
          </author>
          <date month="November" year="2012"/>
          <abstract>
            <t>This specification defines a mechanism enabling web sites to declare themselves accessible only via secure connections and/or for users to be able to direct their user agent(s) to interact with given sites only over secure connections.  This overall policy is referred to as HTTP Strict Transport Security (HSTS).  The policy is declared by web sites via the Strict-Transport-Security HTTP response header field and/or by other means, such as user agent configuration, for example. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6797"/>
        <seriesInfo name="DOI" value="10.17487/RFC6797"/>
      </reference>
      <reference anchor="RFC7469">
        <front>
          <title>Public Key Pinning Extension for HTTP</title>
          <author fullname="C. Evans" initials="C." surname="Evans">
            <organization/>
          </author>
          <author fullname="C. Palmer" initials="C." surname="Palmer">
            <organization/>
          </author>
          <author fullname="R. Sleevi" initials="R." surname="Sleevi">
            <organization/>
          </author>
          <date month="April" year="2015"/>
          <abstract>
            <t>This document defines a new HTTP header that allows web host operators to instruct user agents to remember ("pin") the hosts' cryptographic identities over a period of time.  During that time, user agents (UAs) will require that the host presents a certificate chain including at least one Subject Public Key Info structure whose fingerprint matches one of the pinned fingerprints for that host.  By effectively reducing the number of trusted authorities who can authenticate the domain during the lifetime of the pin, pinning may reduce the incidence of man-in-the-middle attacks due to compromised Certification Authorities.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7469"/>
        <seriesInfo name="DOI" value="10.17487/RFC7469"/>
      </reference>
      <reference anchor="I-D.ietf-httpbis-cache-digest">
        <front>
          <title>Cache Digests for HTTP/2</title>
          <author fullname="Kazuho Oku">
            <organization>Fastly</organization>
          </author>
          <author fullname="Yoav Weiss">
            <organization>Akamai</organization>
          </author>
          <date day="2" month="July" year="2018"/>
          <abstract>
            <t>   This specification defines a HTTP/2 frame type to allow clients to
   inform the server of their cache's contents.  Servers can then use
   this to inform their choices of what to push to clients.

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/cache-digest .

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-cache-digest-05"/>
      </reference>
      <reference anchor="RFC6454">
        <front>
          <title>The Web Origin Concept</title>
          <author fullname="A. Barth" initials="A." surname="Barth">
            <organization/>
          </author>
          <date month="December" year="2011"/>
          <abstract>
            <t>This document defines the concept of an "origin", 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 "Origin", 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="I-D.thomson-http-content-signature">
        <front>
          <title>Content-Signature Header Field for HTTP</title>
          <author fullname="Martin Thomson">
	 </author>
          <date day="2" month="July" 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"/>
      </reference>
      <reference anchor="I-D.burke-content-signature">
        <front>
          <title>HTTP Header for digital signatures
</title>
          <author fullname="Bill Burke" initials="B." surname="Burke">
            <organization>Red Hat</organization>
          </author>
          <date day="7" month="March" 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"/>
      </reference>
      <reference anchor="I-D.cavage-http-signatures">
        <front>
          <title>Signing HTTP Messages</title>
          <author fullname="Mark Cavage">
            <organization>Oracle</organization>
          </author>
          <author fullname="Manu Sporny">
            <organization>Digital Bazaar</organization>
          </author>
          <date day="21" month="October" year="2019"/>
          <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-12"/>
      </reference>
      <reference anchor="W3C.WD-appmanifest-20170828" target="https://www.w3.org/TR/2017/WD-appmanifest-20170828">
        <front>
          <title>Web App Manifest</title>
          <author fullname="Marcos Caceres" initials="M." surname="Caceres">
            <organization/>
          </author>
          <author fullname="Kenneth Christiansen" initials="K." surname="Christiansen">
            <organization/>
          </author>
          <author fullname="Mounir Lamouri" initials="M." surname="Lamouri">
            <organization/>
          </author>
          <author fullname="Anssi Kostiainen" initials="A." surname="Kostiainen">
            <organization/>
          </author>
          <author fullname="Rob Dolin" initials="R." surname="Dolin">
            <organization/>
          </author>
          <date day="28" month="August" year="2017"/>
        </front>
        <seriesInfo name="World Wide Web Consortium WD" value="WD-appmanifest-20170828"/>
      </reference>
      <reference anchor="RFC7515">
        <front>
          <title>JSON Web Signature (JWS)</title>
          <author fullname="M. Jones" initials="M." surname="Jones">
            <organization/>
          </author>
          <author fullname="J. Bradley" initials="J." surname="Bradley">
            <organization/>
          </author>
          <author fullname="N. Sakimura" initials="N." surname="Sakimura">
            <organization/>
          </author>
          <date month="May" year="2015"/>
          <abstract>
            <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification.  Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7515"/>
        <seriesInfo name="DOI" value="10.17487/RFC7515"/>
      </reference>
      <reference anchor="RFC7540">
        <front>
          <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
          <author fullname="M. Belshe" initials="M." surname="Belshe">
            <organization/>
          </author>
          <author fullname="R. Peon" initials="R." surname="Peon">
            <organization/>
          </author>
          <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
            <organization/>
          </author>
          <date month="May" year="2015"/>
          <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.vkrasnov-h2-compression-dictionaries">
        <front>
          <title>Compression Dictionaries for HTTP/2</title>
          <author fullname="Vlad Krasnov">
            <organization>Cloudflare, Inc.</organization>
          </author>
          <author fullname="Yoav Weiss">
            <organization>Akamai Technologies, Inc.</organization>
          </author>
          <date day="5" month="March" year="2018"/>
          <abstract>
            <t>   This document specifies new HTTP/2 frame types and new HTTP/2
   settings values that enable the use of previously transferred data as
   compression dictionaries, significantly improving overall compression
   ratio for a given connection.

   In addition, this document proposes to define a set of industry
   standard, static, dictionaries to be used with any Lempel-Ziv based
   compression for the common textual MIME types prevalent on the web.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-vkrasnov-h2-compression-dictionaries-03"/>
      </reference>
      <reference anchor="I-D.yasskin-dispatch-web-packaging">
        <front>
          <title>Web Packaging</title>
          <author fullname="Jeffrey Yasskin">
            <organization>Google</organization>
          </author>
          <date day="30" month="June" 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"/>
      </reference>
    </references>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>Thanks to Yoav Weiss for the Subresource bundling use case and discussions about
content distributors.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAJzbdmEAA+V963LbSJbmfzwFwvphq4Mg5btL1VM78q1K1WVbYanWM+3o
aCWJJAkLBLhIUDRboYh9jXm9eZI93zknEwmK8mW2ZncntiM6SibBvJ7Ld67I
siyZ1HlRzQ7TVTvNniVJW7SlPUx/dzZ9YZx1qany9L39H6uisQtbtS6d1k36
wY7TEzO5MDPrkryeVGZBP8obM22zwtJI6yV9m62czSYYJTs4SCamtbO62Rym
RTWtk6RYNodp26xc++Dg4IeDB0niWprs76asKxpsQyMvi8P046Re8MSD1NVN
29gp/mqbYtLSfzcL+aCtJ39LErNq53VzmKRZktL/ZFW/2um0sZv0X41zF0XF
39TNzFTFP0xb1NVh+nNdz0rLX9iFKcrD9NNGHv7nybypF8VqMaRf9Id9bcti
adNXTWHcjjGPZ6YsTDzmlH9g8fw/F/ztkLZG50Cn0SzoZ5eWVp4en7578Ozx
wcEh/zanQztMHxzcf8r/bE0zs+1hemfetkt3OBqt1+th4Wosb8THZ5p89OTZ
wcGj4bxdlHfkV3Kndz4cvX+RTovSpjKjfOtoSdZhFTIlL4GellVgajz369H7
rRU92r0iogZHyzGT0mJ/o0/mkihg9JS/GLV2Mq/q1rrRbFXk9J9PpsH/d6yW
ZkxfY7GnSzsppsWETxbPvPnl7M1vh+n71y8ePH6Mgzm1zWUxsR/q5sI27rC3
sHBSDyfDWdHOV+NhUY96vxj15tWvUh0tfVvM5m25uRPtfmpKZ285vA8PX9Ag
r17i+b8en2wfWnb/IDu4v/volhdr09CpmcncTsvNsLLtaG3HfHDMRu0qp9lG
Rycnb9+dvRqe/ctZ/8iiL9IsHdL0coKv+bq3DzLJsiw1Y+IlM2mT5GxeuJTm
WoHb0rJwxOvEwCnPzFzvillFsgIiYUT/HK+qvMS/J3VZ2gkGdUk9TWnJ6RKS
YcDCw37mCUiS0Gm1KT3Q9MQJMVjazu1iKAtaFHlOzJjspcdV29T5igdOkhNb
L2kr63pV5rS6C0s8L+urqxYrrqdTWo3lOYsqrWlMLLld8XZduqZ/2wSf2rRw
1b//z39raUk5LWTSYpBKtoBh6SHc7CUNwL/iD3SepG6KWVHRhbph+ku9tvTU
IC3au3R4xZROd1W2GCMvIKTGq1ZWRE8V0w0GYilFAxWTot3gOMxyWeqliLj1
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
q3QIiQAA

-->

</rfc>
