<?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-rfc version 1.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-resumable-upload-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title abbrev="Resumable Uploads">tus - Resumable Uploads Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-resumable-upload-00"/>
    <author initials="M." surname="Kleidl" fullname="Marius Kleidl" role="editor">
      <organization>Transloadit Ltd</organization>
      <address>
        <email>marius@transloadit.com</email>
      </address>
    </author>
    <author initials="G." surname="Zhang" fullname="Guoye Zhang" role="editor">
      <organization>Apple Inc.</organization>
      <address>
        <email>guoye_zhang@apple.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2022" month="September" day="05"/>
    <area>ART</area>
    <workgroup>HTTP</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>HTTP clients often encounter interrupted data transfers as a result of canceled requests or dropped connections. Prior to interruption, part of a representation may have been exchanged. To complete the data transfer of the entire representation, it is often desirable to issue subsequent requests that transfer only the remainder of the representation. HTTP range requests support this concept of resumable downloads from server to client. This document describes a mechanism that supports resumable uploads from client to server using HTTP.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-resumable-upload/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
        Working Group information can be found at <eref target="https://httpwg.org/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions/labels/resumable-upload"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP clients often encounter interrupted data transfers as a result of canceled requests or dropped connections. Prior to interruption, part of a representation (see <xref section="3.2" sectionFormat="of" target="HTTP"/>) might have been exchanged. To complete the data transfer of the entire representation, it is often desirable to issue subsequent requests that transfer only the remainder of the representation. HTTP range requests (see <xref section="14" sectionFormat="of" target="HTTP"/>) support this concept of resumable downloads from server to client.</t>
      <t>HTTP methods such as POST or PUT can be used by clients to request processing of representation data enclosed in the request message. The transfer of representation data from client to server is often referred to as an upload. Uploads are just as likely as downloads to suffer from the effects of data transfer interruption. Humans can play a role in upload interruptions through manual actions such as pausing an upload. Regardless of the cause of an interruption, servers may have received part of the representation before its occurrence and it is desirable if clients can complete the data transfer by sending only the remainder of the representation. The process of sending additional parts of a representation using subsequent HTTP requests from client to server is herein referred to as a resumable upload.</t>
      <t>Connection interruptions are common and the absence of a standard mechanism for resumable uploads has lead to a proliferation of custom solutions. Some of those use HTTP, while others rely on other transfer mechanisms entirely. An HTTP-based standard solution is desirable for such a common class of problem.</t>
      <t>This document defines the Resumable Uploads Protocol, an optional mechanism for resumable uploads using HTTP that is backwards-compatible with conventional HTTP uploads. When an upload is interrupted, clients can send subsequent requests to query the server state and use this information to the send remaining data. Alternatively, they can cancel the upload entirely. Different from ranged downloads, this protocol does not support transferring different parts of the same representation in parallel.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <t>The terms byte sequence, Item, string, sf-binary, sf-boolean, sf-integer, sf-string, and sf-token are imported from
<xref target="STRUCTURED-FIELDS"/>.</t>
      <t>The terms client and server are imported from <xref target="HTTP"/>.</t>
      <t>Upload: A sequence of one or more procedures, uniquely identified by a token chosen by a client.</t>
      <t>Procedure: An HTTP message exchange for that can be used for resumable uploads.</t>
    </section>
    <section anchor="uploading-overview">
      <name>Uploading Overview</name>
      <t>The Resumable Uploads Protocol consists of several procedures that rely on HTTP message exchanges. The following procedures are defined:</t>
      <ul spacing="normal">
        <li>Upload Creation Procedure (<xref target="upload-creation"/>)</li>
        <li>Offset Retrieving Procedure (<xref target="offset-retrieving"/>)</li>
        <li>Upload Appending Procedure (<xref target="upload-appending"/>)</li>
        <li>Upload Cancellation Procedure (<xref target="upload-cancellation"/>)</li>
      </ul>
      <t>A single upload is a sequence of one or more procedures. Each upload is uniquely
identified by a token chosen by a client. The token is carried in the Upload-Token header field; see <xref target="upload-token"/>.</t>
      <t>The remainder of this section uses examples of a file upload to illustrate permutations of procedure sequence. Note, however, that HTTP message exchanges use representation data (see <xref section="8.1" sectionFormat="of" target="HTTP"/>), which means that procedures can apply to many forms of content.</t>
      <section anchor="example-1-complete-upload-of-file-with-known-size">
        <name>Example 1: Complete upload of file with known size</name>
        <t>In this example, the client first attempts to upload a file with a known size in a single HTTP request. An interruption occurs and the client then attempts to resume the upload using subsequent HTTP requests.</t>
        <t>1) The Upload Creation Procedure (<xref target="upload-creation"/>) can be used to notify the server that the client wants to begin an upload. The server should then reserve the required resources to accept the upload from the client. The client also begins transferring the entire file in the request body. The request includes the Upload-Token header, which is used for identifying future requests related to this upload. An informational response can be sent to the client to signal the support of resumable upload on the server.</t>
        <figure anchor="fig-upload-creation-procedure">
          <name>Upload Creation Procedure</name>
          <artwork><![CDATA[
Client                                  Server
|                                            |
| POST with Upload-Token                     |
|------------------------------------------->|
|                                            |
|                                            | Reserve resources
|                                            | for Upload-Token
|                                            |------------------
|                                            |                 |
|                                            |<-----------------
|                                            |
|            104 Upload Resumption Supported |
|<-------------------------------------------|
|                                            |
| Flow Interrupted                           |
|------------------------------------------->|
|                                            |
]]></artwork>
        </figure>
        <t>2) If the connection to the server gets interrupted during the Upload Creation Procedure, the client may want to resume the upload. Before this is possible, the client must know the amount of data that the server was able to receive before the connection got interrupted. To achieve this, the client uses the Offset Retrieving Procedure (<xref target="offset-retrieving"/>) to obtain the upload's offset.</t>
        <figure anchor="fig-offset-retrieving-procedure">
          <name>Offset Retrieving Procedure</name>
          <artwork><![CDATA[
Client                                      Server
|                                                |
| HEAD with Upload-Token                         |
|----------------------------------------------->|
|                                                |
|              204 No Content with Upload-Offset |
|<-----------------------------------------------|
|                                                |
]]></artwork>
        </figure>
        <t>3) After the Offset Retrieving Procedure (<xref target="offset-retrieving"/>) completes, the client can resume the upload by sending the remaining file content to the server using the Upload Appending Procedure (<xref target="upload-appending"/>), appending to the already stored data in the upload. The <tt>Upload-Offset</tt> value is included to ensure that the client and server agree on the offset that the upload resumes from.</t>
        <figure anchor="fig-upload-appending-procedure">
          <name>Upload Appending Procedure</name>
          <artwork><![CDATA[
Client                                      Server
|                                                |
| PATCH with Upload-Token and Upload-Offset      |
|----------------------------------------------->|
|                                                |
|                      201 Created on completion |
|<-----------------------------------------------|
|                                                |
]]></artwork>
        </figure>
        <t>4) If the client is not interested in completing the upload anymore, it can instruct the server to delete the upload and free all related resources using the Upload Cancellation Procedure (<xref target="upload-cancellation"/>).</t>
        <figure anchor="fig-upload-cancellation-procedure">
          <name>Upload Cancellation Procedure</name>
          <artwork><![CDATA[
Client                                      Server
|                                                |
| DELETE with Upload-Token                       |
|----------------------------------------------->|
|                                                |
|                   204 No Content on completion |
|<-----------------------------------------------|
|                                                |
]]></artwork>
        </figure>
      </section>
      <section anchor="example-2-upload-as-a-series-of-parts">
        <name>Example 2: Upload as a series of parts</name>
        <t>In some cases clients might prefer to upload a file as a series of parts sent across multiple HTTP messages. One use case is to overcome server limits on HTTP message content size. Another use case is where the client does not know the final size, such as when file data originates from a streaming source.</t>
        <t>This example shows how the client, with prior knowledge about the server's resumable upload support, can upload parts of a file over a sequence of procedures.</t>
        <t>1) If the client is aware that the server supports resumable upload, it can use the Upload Creation Procedure with the <tt>Upload-Incomplete</tt> header to start an upload.</t>
        <figure anchor="fig-upload-creation-procedure-incomplete">
          <name>Upload Creation Procedure Incomplete</name>
          <artwork><![CDATA[
Client                                      Server
|                                                |
| POST with Upload-Token and Upload-Incomplete   |
|----------------------------------------------->|
|                                                |
|             201 Created with Upload-Incomplete |
|              on completion                     |
|<-----------------------------------------------|
|                                                |
]]></artwork>
        </figure>
        <t>2) After creation, the following parts are sent using the Upload Appending Procedure (<xref target="upload-appending"/>), and the last part of the upload does not have the <tt>Upload-Incomplete</tt> header.</t>
        <figure anchor="fig-upload-appending-procedure-last-chunk">
          <name>Upload Appending Procedure Last Chunk</name>
          <artwork><![CDATA[
Client                                      Server
|                                                |
| PATCH with Upload-Token and Upload-Offset      |
|----------------------------------------------->|
|                                                |
|                      201 Created on completion |
|<-----------------------------------------------|
|                                                |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="upload-creation">
      <name>Upload Creation Procedure</name>
      <t>The Upload Creation Procedure is intended for starting a new upload. A limited form of this procedure <bcp14>MAY</bcp14> be used by the client without the knowledge of server support of the Resumable Uploads Protocol.</t>
      <t>This procedure is designed to be compatible with a regular upload. Therefore all methods are allowed with the exception of <tt>GET</tt>, <tt>HEAD</tt>, <tt>DELETE</tt>, and <tt>OPTIONS</tt>. All response status codes are allowed. The client is <bcp14>RECOMMENDED</bcp14> to use the <tt>POST</tt> method if not otherwise intended. The server <bcp14>MAY</bcp14> only support a limited number of methods.</t>
      <t>The request <bcp14>MUST</bcp14> include the <tt>Upload-Token</tt> header field (<xref target="upload-token"/>) which uniquely identifies an upload. The client <bcp14>MUST NOT</bcp14> reuse the token for a different upload. The request <bcp14>MUST NOT</bcp14> include the <tt>Upload-Offset</tt> header.</t>
      <t>If the end of the request body is not the end of the upload, the <tt>Upload-Incomplete</tt> header field (<xref target="upload-incomplete"/>) <bcp14>MUST</bcp14> be set to true.</t>
      <t>If the server already has an active upload with the same token in the <tt>Upload-Token</tt> header field, it <bcp14>MUST</bcp14> respond with <tt>409 (Conflict)</tt> status code.</t>
      <t>The server <bcp14>MUST</bcp14> send the <tt>Upload-Offset</tt> header in the response if it considers the upload active, either when the response is a success (e.g. <tt>201 (Created)</tt>), or when the response is a failure (e.g. <tt>409 (Conflict)</tt>). The value <bcp14>MUST</bcp14> be equal to the end offset of the entire upload, or the begin offset of the next chunk if the upload is still incomplete. The client <bcp14>SHOULD</bcp14> consider the upload failed if the response status code indicates a success but the offset in the <tt>Upload-Offset</tt> header field in the response does not equal to the begin offset plus the number of bytes uploaded in the request.</t>
      <t>If the request completes successfully and the entire upload is complete, the server <bcp14>MUST</bcp14> acknowledge it by responding with a successful status code between 200 and 299 (inclusive). Server is <bcp14>RECOMMENDED</bcp14> to use <tt>201 (Created)</tt> response if not otherwise specified. The response <bcp14>MUST NOT</bcp14> include the <tt>Upload-Incomplete</tt> header with the value of true.</t>
      <t>If the request completes successfully but the entire upload is not yet complete indicated by the <tt>Upload-Incomplete</tt> header, the server <bcp14>MUST</bcp14> acknowledge it by responding with the <tt>201 (Created)</tt> status code, the <tt>Upload-Incomplete</tt> header set to true.</t>
      <sourcecode type="example"><![CDATA[
:method: POST
:scheme: https
:authority: example.com
:path: /upload
upload-token: :SGVs…SGU=:
upload-draft-interop-version: 2
content-length: 100
[content (100 bytes)]

:status: 104
upload-draft-interop-version: 2

:status: 201
upload-offset: 100
]]></sourcecode>
      <sourcecode type="example"><![CDATA[
:method: POST
:scheme: https
:authority: example.com
:path: /upload
upload-token: :SGVs…SGU=:
upload-draft-interop-version: 2
upload-incomplete: ?1
content-length: 25
[partial content (25 bytes)]

:status: 201
upload-incomplete: ?1
upload-offset: 25
]]></sourcecode>
      <t>The client <bcp14>MAY</bcp14> automatically attempt upload resumption when the connection is terminated unexpectedly, or if a server error status code between 500 and 599 (inclusive) is received. The client <bcp14>SHOULD NOT</bcp14> automatically retry if a client error status code between 400 and 499 (inclusive) is received.</t>
      <t>File metadata can affect how servers might act on the uploaded file. Clients can send Representation Metadata (see <xref section="8.3" sectionFormat="of" target="HTTP"/>) in the Upload Creation Procedure request that starts an upload. Servers <bcp14>MAY</bcp14> interpret this metadata or <bcp14>MAY</bcp14> ignore it. The <tt>Content-Type</tt> header can be used to indicate the MIME type of the file. The <tt>Content-Disposition</tt> header can be used to transmit a filename. If included, the parameters <bcp14>SHOULD</bcp14> be either <tt>filename</tt>, <tt>filename*</tt> or <tt>boundary</tt>.</t>
      <section anchor="feature-detection">
        <name>Feature Detection</name>
        <t>If the client has no knowledge of whether the server supports resumable upload, the Upload Creation Procedure <bcp14>MAY</bcp14> be used with some additional constraints. In particular, the <tt>Upload-Incomplete</tt> header field (<xref target="upload-incomplete"/>) <bcp14>MUST NOT</bcp14> be sent in the request if the server support is unclear. This allows the upload to function as if it is a regular upload.</t>
        <t>If the server detects the Upload Creation Procedure and it supports resumable upload, an informational response with <tt>104 (Upload Resumption Supported)</tt> status <bcp14>MAY</bcp14> be sent to the client while the request body is being uploaded.</t>
        <t>The client <bcp14>MUST NOT</bcp14> attempt to resume an upload if it did not receive the <tt>104 (Upload Resumption Supported)</tt> informational response, and it does not have other signals of whether the server supporting resumable upload.</t>
      </section>
      <section anchor="draft-version-identification">
        <name>Draft Version Identification</name>
        <ul empty="true">
          <li>
            <t><strong>RFC Editor's Note:</strong>  Please remove this section and <tt>Upload-Draft-Interop-Version</tt> from all examples prior to publication of a final version of this document.</t>
          </li>
        </ul>
        <t>The current interop version is 2.</t>
        <t>Client implementations of draft versions of the protocol <bcp14>MUST</bcp14> send a header field <tt>Upload-Draft-Interop-Version</tt> with the interop version as its value to its requests. Its ABNF is</t>
        <sourcecode type="abnf"><![CDATA[
Upload-Draft-Interop-Version = sf-integer
]]></sourcecode>
        <t>Server implementations of draft versions of the protocol <bcp14>MUST NOT</bcp14> send a <tt>104 (Upload Resumption Supported)</tt> informational response when the interop version indicated by the <tt>Upload-Draft-Interop-Version</tt> header field in the request is missing or mismatching.</t>
        <t>Server implementations of draft versions of the protocol <bcp14>MUST</bcp14> also send a header field <tt>Upload-Draft-Interop-Version</tt> with the interop version as its value to the <tt>104 (Upload Resumption Supported)</tt> informational response.</t>
        <t>Client implementations of draft versions of the protocol <bcp14>MUST</bcp14> ignore a <tt>104 (Upload Resumption Supported)</tt> informational response with missing or mismatching interop version indicated by the <tt>Upload-Draft-Interop-Version</tt> header field.</t>
        <t>The reason both the client and the server are sending and checking the draft version is to ensure that implementations of the final RFC will not accidentally interop with draft implementations, as they will not check the existence of the <tt>Upload-Draft-Interop-Version</tt> header field.</t>
      </section>
    </section>
    <section anchor="offset-retrieving">
      <name>Offset Retrieving Procedure</name>
      <t>If an upload is interrupted, the client <bcp14>MAY</bcp14> attempt to fetch the offset of the incomplete upload by sending a <tt>HEAD</tt> request to the server with the same <tt>Upload-Token</tt> header field (<xref target="upload-token"/>). The client <bcp14>MUST NOT</bcp14> initiate this procedure without the knowledge of server support.</t>
      <t>The request <bcp14>MUST</bcp14> use the <tt>HEAD</tt> method and include the <tt>Upload-Token</tt> header. The request <bcp14>MUST NOT</bcp14> include the <tt>Upload-Offset</tt> header or the <tt>Upload-Incomplete</tt> header. The server <bcp14>MUST</bcp14> reject the request with the <tt>Upload-Offset</tt> header or the <tt>Upload-Incomplete</tt> header by sending a <tt>400 (Bad Request)</tt> response.</t>
      <t>If the server considers the upload associated with this token active, it <bcp14>MUST</bcp14> send back a <tt>204 (No Content)</tt> response. The response <bcp14>MUST</bcp14> include the <tt>Upload-Offset</tt> header set to the current resumption offset for the client. The response <bcp14>MUST</bcp14> include the <tt>Upload-Incomplete</tt> header which is set to true if and only if the upload is incomplete. An upload is considered complete if and only if the server completely and successfully received a corresponding Upload Creation Procedure (<xref target="upload-creation"/>) or Upload Appending Procedure (<xref target="upload-appending"/>) request with the <tt>Upload-Incomplete</tt> header being omitted or set to false.</t>
      <t>The client <bcp14>MUST NOT</bcp14> perform the Offset Retrieving Procedure (<xref target="offset-retrieving"/>) while the Upload Creation Procedure (<xref target="upload-creation"/>) or the Upload Appending Procedure (<xref target="upload-appending"/>) is in progress.</t>
      <t>The offset <bcp14>MUST</bcp14> be accepted by a subsequent Upload Appending Procedure (<xref target="upload-appending"/>). Due to network delay and reordering, the server might still be receiving data from an ongoing transfer for the same token, which in the client perspective has failed. The server <bcp14>MAY</bcp14> terminate any transfers for the same token before sending the response by abruptly terminating the HTTP connection or stream. Alternatively, the server <bcp14>MAY</bcp14> keep the ongoing transfer alive but ignore further bytes received past the offset.</t>
      <t>The client <bcp14>MUST NOT</bcp14> start more than one Upload Appending Procedures (<xref target="upload-appending"/>) based on the resumption offset from a single Offset Retrieving Procedure (<xref target="offset-retrieving"/>).</t>
      <t>The response <bcp14>SHOULD</bcp14> include <tt>Cache-Control: no-store</tt> header to prevent HTTP caching.</t>
      <t>If the server does not consider the upload associated with this token active, it <bcp14>MUST</bcp14> respond with <tt>404 (Not Found)</tt> status code.</t>
      <t>The resumption offset can be less than or equal to the number of bytes the client has already sent. The client <bcp14>MAY</bcp14> reject an offset which is greater than the number of bytes it has already sent during this upload. The client is expected to handle backtracking of a reasonable length. If the offset is invalid for this upload, or if the client cannot backtrack to the offset and reproduce the same content it has already sent, the upload <bcp14>MUST</bcp14> be considered a failure. The client <bcp14>MAY</bcp14> use the Upload Cancellation Procedure (<xref target="upload-cancellation"/>) to cancel the upload after rejecting the offset.</t>
      <artwork><![CDATA[
:method: HEAD
:scheme: https
:authority: example.com
:path: /upload
upload-token: :SGVs…SGU=:
upload-draft-interop-version: 2

:status: 204
upload-offset: 100
cache-control: no-store
]]></artwork>
      <t>The client <bcp14>SHOULD NOT</bcp14> automatically retry if a client error status code between 400 and 499 (inclusive) is received.</t>
    </section>
    <section anchor="upload-appending">
      <name>Upload Appending Procedure</name>
      <t>The Upload Appending Procedure is used for resuming an existing upload.</t>
      <t>The request <bcp14>MUST</bcp14> use the <tt>PATCH</tt> method and include the <tt>Upload-Token</tt> header. The <tt>Upload-Offset</tt> header field (<xref target="upload-offset"/>) <bcp14>MUST</bcp14> be set to the resumption offset.</t>
      <t>If the end of the request body is not the end of the upload, the <tt>Upload-Incomplete</tt> header field (<xref target="upload-incomplete"/>) <bcp14>MUST</bcp14> be set to true.</t>
      <t>The server <bcp14>SHOULD</bcp14> respect representation metadata received in the Upload Creation Procedure (<xref target="upload-creation"/>) and ignore any representation metadata received in the Upload Appending Procedure (<xref target="upload-appending"/>).</t>
      <t>If the server does not consider the upload associated with the token in the <tt>Upload-Token</tt> header field active, it <bcp14>MUST</bcp14> respond with <tt>404 (Not Found)</tt> status code.</t>
      <t>The client <bcp14>MUST NOT</bcp14> perform multiple upload transfers for the same token using Upload Creation Procedures (<xref target="upload-creation"/>) or Upload Appending Procedures (<xref target="upload-appending"/>) in parallel to avoid race conditions and data loss or corruption. The server is <bcp14>RECOMMENDED</bcp14> to take measures to avoid parallel upload transfers: The server <bcp14>MAY</bcp14> terminate any ongoing Upload Creation Procedure (<xref target="upload-creation"/>) or Upload Appending Procedure (<xref target="upload-appending"/>) for the same token. Since the client is not allowed to perform multiple transfers in parallel, the server can assume that the previous attempt has already failed. Therefore, the server <bcp14>MAY</bcp14> abruptly terminate the previous HTTP connection or stream.</t>
      <t>If the offset in the <tt>Upload-Offset</tt> header field does not match the offset provided by the immediate previous Offset Retrieving Procedure (<xref target="offset-retrieving"/>), or the end offset of the immediate previous incomplete transfer, the server <bcp14>MUST</bcp14> respond with <tt>409 (Conflict)</tt> status code.</t>
      <t>The server <bcp14>MUST</bcp14> send the <tt>Upload-Offset</tt> header in the response if it considers the upload active, either when the response is a success (e.g. <tt>201 (Created)</tt>), or when the response is a failure (e.g. <tt>409 (Conflict)</tt>). The value <bcp14>MUST</bcp14> be equal to the end offset of the entire upload, or the begin offset of the next chunk if the upload is still incomplete. The client <bcp14>SHOULD</bcp14> consider the upload failed if the response status code indicates a success but the offset in the <tt>Upload-Offset</tt> header field in the response does not equal to the begin offset plus the number of bytes uploaded in the request.</t>
      <t>If the request completes successfully and the entire upload is complete, the server <bcp14>MUST</bcp14> acknowledge it by responding with a successful status code between 200 and 299 (inclusive). Server is <bcp14>RECOMMENDED</bcp14> to use <tt>201 (Created)</tt> response if not otherwise specified. The response <bcp14>MUST NOT</bcp14> include the <tt>Upload-Incomplete</tt> header with the value of true.</t>
      <t>If the request completes successfully but the entire upload is not yet complete indicated by the <tt>Upload-Incomplete</tt> header, the server <bcp14>MUST</bcp14> acknowledge it by responding with the <tt>201 (Created)</tt> status code, the <tt>Upload-Incomplete</tt> header set to true.</t>
      <sourcecode type="example"><![CDATA[
:method: PATCH
:scheme: https
:authority: example.com
:path: /upload
upload-token: :SGVs…SGU=:
upload-offset: 100
upload-draft-interop-version: 2
content-length: 100
[content (100 bytes)]

:status: 201
upload-offset: 200
]]></sourcecode>
      <t>The client <bcp14>MAY</bcp14> automatically attempt upload resumption when the connection is terminated unexpectedly, or if a server error status code between 500 and 599 (inclusive) is received. The client <bcp14>SHOULD NOT</bcp14> automatically retry if a client error status code between 400 and 499 (inclusive) is received.</t>
    </section>
    <section anchor="upload-cancellation">
      <name>Upload Cancellation Procedure</name>
      <t>If the client wants to terminate the transfer without the ability to resume, it <bcp14>MAY</bcp14> send a <tt>DELETE</tt> request to the server along with the <tt>Upload-Token</tt> which is an indication that the client is no longer interested in uploading this body and the server can release resources associated with this token. The client <bcp14>MUST NOT</bcp14> initiate this procedure without the knowledge of server support.</t>
      <t>The request <bcp14>MUST</bcp14> use the <tt>DELETE</tt> method and include the <tt>Upload-Token</tt> header. The request <bcp14>MUST NOT</bcp14> include the <tt>Upload-Offset</tt> header or the <tt>Upload-Incomplete</tt> header. The server <bcp14>MUST</bcp14> reject the request with the <tt>Upload-Offset</tt> header or the <tt>Upload-Incomplete</tt> header by sending a <tt>400 (Bad Request)</tt> response.</t>
      <t>If the server has successfully deactivated this token, it <bcp14>MUST</bcp14> send back a <tt>204 (No Content)</tt> response.</t>
      <t>The server <bcp14>MAY</bcp14> terminate any ongoing Upload Creation Procedure (<xref target="upload-creation"/>) or Upload Appending Procedure (<xref target="upload-appending"/>) for the same token before sending the response by abruptly terminating the HTTP connection or stream.</t>
      <t>If the server does not consider the upload associated with this token active, it <bcp14>MUST</bcp14> respond with <tt>404 (Not Found)</tt> status code.</t>
      <t>If the server does not support cancellation, it <bcp14>MUST</bcp14> respond with <tt>405 (Method Not Allowed)</tt> status code.</t>
      <sourcecode type="example"><![CDATA[
:method: DELETE
:scheme: https
:authority: example.com
:path: /upload
upload-token: :SGVs…SGU=:
upload-draft-interop-version: 2

:status: 204
]]></sourcecode>
    </section>
    <section anchor="request-identification">
      <name>Request Identification</name>
      <t>The Upload Creation Procedure (<xref target="upload-creation"/>) supports arbitrary methods including <tt>PATCH</tt>, therefore it is not possible to identify the procedure of a request purely by its method. The following algorithm is <bcp14>RECOMMENDED</bcp14> to identify the procedure from a request for a generic implementation:</t>
      <ol spacing="normal" type="1"><li>The <tt>Upload-Token</tt> header is not present: Not a resumable upload.</li>
        <li>The <tt>Upload-Offset</tt> header is present: Upload Appending Procedure (<xref target="upload-appending"/>).</li>
        <li>The method is <tt>HEAD</tt>: Offset Retrieving Procedure (<xref target="offset-retrieving"/>).</li>
        <li>The method is <tt>DELETE</tt>: Upload Cancellation Procedure (<xref target="upload-cancellation"/>).</li>
        <li>Otherwise: Upload Creation Procedure (<xref target="upload-creation"/>).</li>
      </ol>
    </section>
    <section anchor="header-fields">
      <name>Header Fields</name>
      <section anchor="upload-token">
        <name>Upload-Token</name>
        <t>The <tt>Upload-Token</tt> request header field is an Item Structured Header (see <xref section="3.3" sectionFormat="of" target="STRUCTURED-FIELDS"/>) carrying the token used for identification of a specific upload. Its value <bcp14>MUST</bcp14> be a byte sequence. Its ABNF is</t>
        <sourcecode type="abnf"><![CDATA[
Upload-Token = sf-binary
]]></sourcecode>
        <t>If not otherwise specified by the server, the client is <bcp14>RECOMMENDED</bcp14> to use 256-bit (32 bytes) cryptographically-secure random binary data as the value of the <tt>Upload-Token</tt>, in order to ensure that it is globally unique and non-guessable.</t>
        <t>A conforming implementation <bcp14>MUST</bcp14> be able to handle a <tt>Upload-Token</tt> field value of at least 128 octets.</t>
      </section>
      <section anchor="upload-offset">
        <name>Upload-Offset</name>
        <t>The <tt>Upload-Offset</tt> request and response header field is an Item Structured Header indicating the resumption offset of corresponding upload, counted in bytes. Its value <bcp14>MUST</bcp14> be an integer. Its ABNF is</t>
        <sourcecode type="abnf"><![CDATA[
Upload-Offset = sf-integer
]]></sourcecode>
      </section>
      <section anchor="upload-incomplete">
        <name>Upload-Incomplete</name>
        <t>The <tt>Upload-Incomplete</tt> request and response header field is an Item Structured Header indicating whether the corresponding upload is considered complete. Its value <bcp14>MUST</bcp14> be a boolean. Its ABNF is</t>
        <sourcecode type="abnf"><![CDATA[
Upload-Incomplete = sf-boolean
]]></sourcecode>
      </section>
    </section>
    <section anchor="redirection">
      <name>Redirection</name>
      <t>The <tt>301 (Moved Permanently)</tt> status code and the <tt>302 (Found)</tt> status code <bcp14>MUST NOT</bcp14> be used in Offset Retrieving Procedure (<xref target="offset-retrieving"/>) and Upload Cancellation Procedure (<xref target="upload-cancellation"/>) responses. A <tt>308 (Permanent Redirect)</tt> response <bcp14>MAY</bcp14> be persisted for all subsequent procedures. If client receives a <tt>307 (Temporary Redirect)</tt> response in the Offset Retrieving Procedure (<xref target="offset-retrieving"/>), it <bcp14>MAY</bcp14> apply the redirection directly in the immediate subsequent Upload Appending Procedure (<xref target="upload-appending"/>).</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The tokens inside the <tt>Upload-Token</tt> header field can be selected by the client which has no knowledge of tokens picked by other client, so uniqueness cannot be guaranteed. If the token is guessable, an attacker can append malicious data to ongoing uploads. To mitigate these issues, 256-bit cryptographically-secure random binary data is recommended for the token.</t>
      <t>It is <bcp14>OPTIONAL</bcp14> for the server to partition upload tokens based on client identity established through other channels, such as Cookie or TLS client authentication. The client <bcp14>MAY</bcp14> relax the token strength if it is aware of server-side partitioning.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This specification registers the following entry in the Permanent Message Header Field Names registry established by <xref target="RFC3864"/>:</t>
      <t>Header field name: Upload-Token, Upload-Offset, Upload-Incomplete</t>
      <t>Applicable protocol: http</t>
      <t>Status: standard</t>
      <t>Author/change controller: IETF</t>
      <t>Specification: This document</t>
      <t>Related information: n/a</t>
      <t>This specification registers the following entry in the "HTTP Status Codes" registry:</t>
      <t>Code: 104 (suggested value)</t>
      <t>Description: Upload Resumption Supported</t>
      <t>Specification: This document</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <date month="March" year="1997"/>
          <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="HTTP">
        <front>
          <title>HTTP Semantics</title>
          <author fullname="Roy T. Fielding">
            <organization>Adobe</organization>
          </author>
          <author fullname="Mark Nottingham">
            <organization>Fastly</organization>
          </author>
          <author fullname="Julian Reschke">
            <organization>greenbytes GmbH</organization>
          </author>
          <date day="12" month="September" year="2021"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.

 This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.
            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <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>
      <reference anchor="STRUCTURED-FIELDS">
        <front>
          <title>Structured Field Values for HTTP</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham">
            <organization/>
          </author>
          <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
            <organization/>
          </author>
          <date month="February" year="2021"/>
          <abstract>
            <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8941"/>
        <seriesInfo name="DOI" value="10.17487/RFC8941"/>
      </reference>
      <reference anchor="RFC3864">
        <front>
          <title>Registration Procedures for Message Header Fields</title>
          <author fullname="G. Klyne" initials="G." surname="Klyne">
            <organization/>
          </author>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham">
            <organization/>
          </author>
          <author fullname="J. Mogul" initials="J." surname="Mogul">
            <organization/>
          </author>
          <date month="September" year="2004"/>
          <abstract>
            <t>This specification defines registration procedures for the message header fields used by Internet mail, HTTP, Netnews and other applications.  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="90"/>
        <seriesInfo name="RFC" value="3864"/>
        <seriesInfo name="DOI" value="10.17487/RFC3864"/>
      </reference>
    </references>
    <section anchor="changes">
      <name>Changes</name>
      <section anchor="since-draft-tus-httpbis-resumable-uploads-protocol-01">
        <name>Since draft-tus-httpbis-resumable-uploads-protocol-01</name>
        <ul spacing="normal">
          <li>Clarifying backtracking and preventing skipping ahead during the Offset Receiving Procedure.</li>
          <li>Clients auto-retry 404 is no longer allowed.</li>
        </ul>
      </section>
      <section anchor="since-draft-tus-httpbis-resumable-uploads-protocol-00">
        <name>Since draft-tus-httpbis-resumable-uploads-protocol-00</name>
        <ul spacing="normal">
          <li>Split the Upload Transfer Procedure into the Upload Creation Procedure and the Upload Appending Procedure.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document is based on an Internet-Draft specification written by Jiten Mehta, Stefan Matsson, and the authors of this document.</t>
      <t>TODO: more acknowledgements.</t>
    </section>
    <section numbered="false" anchor="appendix">
      <name>Appendix</name>
      <section numbered="false" anchor="informational-response">
        <name>Informational Response</name>
        <t>The server is allowed to respond to Upload Creation Procedure (<xref target="upload-creation"/>) requests with a <tt>104 (Upload Resumption Supported)</tt> intermediate response as soon as the server has validated the request. This way, the client knows that the server supports resumable uploads before the complete response for the Upload Creation Procedure is received. The benefit is the clients can defer starting the actual data transfer until the server indicates full support of the incoming Upload Creation Procedure (i.e. resumable are supported, the provided upload token is active etc).</t>
        <t>On the contrary, support for intermediate responses (the <tt>1XX</tt> range) in existing software is limited or not at all present. Such software includes proxies, firewalls, browsers, and HTTP libraries for clients and server. Therefore, the <tt>104 (Upload Resumption Supported)</tt> status code is optional and not mandatory for the successful completion of an upload. Otherwise, it might be impossible in some cases to implement resumable upload servers using existing software packages. Furthermore, as parts of the current internet infrastructure currently have limited support for intermediate responses, a successful delivery of a <tt>104 (Upload Resumption Supported)</tt> from the server to the client should be assumed.</t>
        <t>We hope that support for intermediate responses increases in the near future, to allow a wider usage of <tt>104 (Upload Resumption Supported)</tt>.</t>
      </section>
      <section numbered="false" anchor="feature-detection-1">
        <name>Feature Detection</name>
        <t>This specification includes a section about feature detection (it was called service discovery in earlier discussions, but this name is probably ill-suited). The idea is to allow resumable uploads to be transparently implemented by HTTP clients. This means that application developers just keep using the same API of their HTTP library as they have done in the past with traditional, non-resumable uploads. Once the HTTP library gets updated (e.g. because mobile OS or browsers start implementing resumable uploads), the HTTP library can transparently decide to use resumable uploads without explicit configuration by the application developer. Of course, in order to use resumable uploads, the HTTP library needs to know whether the server supports resumable uploads. If no support is detected, the HTTP library should use the traditional, non-resumable upload technique. We call this process feature detection.</t>
        <t>Ideally, the technique used for feature detection meets following <strong>criteria</strong> (there might not be one approach which fits all requirements, so we have to prioritize them):</t>
        <ol spacing="normal" type="1"><li>Avoid additional roundtrips by the client, if possible (i.e. an additional HTTP request by the client should be avoided).</li>
          <li>Be backwards compatible to HTTP/1.1 and existing network infrastructure: This means to avoid using new features in HTTP/2, or features which might require changes to existing network infrastructure (e.g. nginx or HTTP libraries)</li>
          <li>Conserve the user's privacy (i.e. the feature detection should not leak information to other third-parties about which URLs have been connected to)</li>
        </ol>
        <t>Following <strong>approaches</strong> have already been considered in the past. All except the last approaches have not been deemed acceptable and are therefore not included in the specification. This follow list is a reference for the advantages and disadvantages of some approaches:</t>
        <t><strong>Include a support statement in the SETTINGS frame.</strong> The SETTINGS frame is a HTTP/2 feature and is sent by the server to the client to exchange information about the current connection. The idea was to include an additional statement in this frame, so the client can detect support for resumable uploads without an additional roundtrip. The problem is that this is not compatible with HTTP/1.1. Furthermore, the SETTINGS frame is intended for information about the current connection (not bound to a request/response) and might not be persisted when transmitted through a proxy.</t>
        <t><strong>Include a support statement in the DNS record.</strong> The client can detect support when resolving a domain name. Of course, DNS is not semantically the correct layer. Also, DNS might not be involved if the record is cached or retrieved from a hosts files.</t>
        <t><strong>Send a HTTP request to ask for support.</strong> This is the easiest approach where the client sends an OPTIONS request and uses the response to determine if the server indicates support for resumable uploads. An alternative is that the client sends the request to a well-known URL to obtain this response, e.g. <tt>/.well-known/resumable-uploads</tt>. Of course, while being fully backwards-compatible, it requires an additional roundtrip.</t>
        <t><strong>Include a support statement in previous responses.</strong> In many cases, the file upload is not the first time that the client connects to the server. Often additional requests are sent beforehand for authentication, data retrieval etc. The responses for those requests can also include a header which indicates support for resumable uploads. There are two options:
- Use the standardized <tt>Alt-Svc</tt> response header. However, it has been indicated to us that this header might be reworked in the future and could also be semantically different from our intended usage.
- Use a new response header <tt>Resumable-Uploads: https://example.org/files/*</tt> to indicate under which endpoints support for resumable uploads is available.</t>
        <t><strong>Send a 104 intermediate response to indicate support.</strong> The clients normally starts a traditional upload and includes a header indicate that it supports resumable uploads (e.g. <tt>Upload-Offset: 0</tt>). If the server also supports resumable uploads, it will immediately respond with a 104 intermediate response to indicate its support, before further processing the request. This way the client is informed during the upload whether it can resume from possible connection errors or not. While an additional roundtrip is avoided, the problem with that solution is that many HTTP server libraries do not support sending custom 1XX responses and that some proxies may not be able to handle new 1XX status codes correctly.</t>
        <t><strong>Send a 103 Early Hint response to indicate support.</strong> This approach is the similar to the above one, with one exception: Instead of a new <tt>104 (Upload Resumption Supported)</tt> status code, the existing <tt>103 (Early Hint)</tt> status code is used in the intermediate response. The 103 code would then be accompanied by a header indicating support for resumable uploads (e.g. <tt>Resumable-Uploads: 1</tt>). It is unclear whether the Early Hints code is appropriate for that, as it is currently only used to indicate resources for prefetching them.</t>
      </section>
      <section numbered="false" anchor="upload-metadata">
        <name>Upload Metadata</name>
        <t>The Upload Creation Procedure (<xref target="upload-creation"/>) allows the <tt>Content-Type</tt> and <tt>Content-Disposition</tt> header to be included. They are intended to be a standardized way of communicating the file name and file type, if available. However, this is not without controversy. Some argue that since these headers are already defined in other specifications, it is not necessary to include them here again. Furthermore, the <tt>Content-Disposition</tt> header field's format is not clearly enough defined. For example, it is left open which disposition value should be used in the header. There needs to be more discussion whether this approach is suited or not.</t>
        <t>However, from experience with the tus project, users are often asking for a way to communicate the file name and file type. Therefore, we believe it is help to explicitly include an approach for doing so.</t>
      </section>
      <section numbered="false" anchor="faq">
        <name>FAQ</name>
        <ul spacing="normal">
          <li>
            <strong>Are multipart requests supported?</strong> Yes, requests whose body is encoded using the <tt>multipart/form-data</tt> are implicitly supported. The entire encoded body can be considered as a single file, which is then uploaded using the resumable protocol. The server, of course, must store the delimiter ("boundary") separating each part and must be able to parse the multipart format once the upload is completed.</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
6P8CmkKDM3yVAAA=

-->

</rfc>
