<?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.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-martinez-partial-content-uploads-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Partial Content Uploads">Partial Content Uploads in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-martinez-partial-content-uploads-00"/>
    <author initials="C." surname="Martinez" fullname="Christopher Martinez">
      <organization/>
      <address>
        <email>chris.s.martinez@outlook.com</email>
      </address>
    </author>
    <date year="2026" month="August" day="07"/>
    <keyword>partial</keyword>
    <keyword>upload</keyword>
    <keyword>range</keyword>
    <keyword>http</keyword>
    <abstract>
      <?line 59?>

<t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines partial content uploads, which allows a client to upload content, such as a large file, via multiple requests. This document also outlines the metadata header fields for indicating state changes, request header fields for making preconditions on such state, and the rules for constructing the responses.</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-martinez-partial-content-uploads/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/commonsensesoftware/partial-content-uploads"/>.</t>
    </note>
  </front>
  <middle>
    <?line 63?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Hypertext Transfer Protocol (HTTP) clients often encounter interrupted data transfers because of canceled requests or dropped connections. Section 14 of <xref target="RFC9110"/> defines HTTP range requests and partial responses, but it only describes how a client can transfer data from a server (e.g. download).</t>
      <t>This document defines a reciprocal set of HTTP range requests and responses that a client can use to transfer data to a server (e.g. upload). Where appropriate, this document will use existing range units and header fields defined in <xref target="RFC9110"/>, <xref target="RFC6266"/>, and <xref target="RFC2183"/>.</t>
      <t>Although the range request mechanism is designed to allow for extensible range types, this specification only defines requests for byte ranges.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
        </t>
        <t>This specification defines conformance criteria for both senders (usually, HTTP user agents) and recipients (usually, HTTP origin servers). An implementation is considered conformant if it complies with all the requirements associated with its role.</t>
      </section>
      <section anchor="syntax-notation">
        <name>Syntax Notation</name>
        <t>This specification uses the Augmented Backus-Naur Form (ABNF) notation of <xref target="RFC5234"/> with a list extension, defined in Section 2.1 of <xref target="RFC9110"/>, that allows for compact definition of comma-separated lists using a '#' operator (similar to how the '*' operator indicates repetition).</t>
      </section>
    </section>
    <section anchor="new-upload">
      <name>New Partial Content Upload</name>
      <t>The POST method MUST be used to indicate that the client intends to start a new partial content upload. The client MUST send the Content-Disposition header field defined in <xref target="RFC6266"/> to indicate how the origin server is expected process the content. This will provide enough information for the origin server to allocate the requested storage space before any content is uploaded. This behavior ensures that the origin server has enough storage space and the client is authorized to upload the content.</t>
      <t>If the origin server successfully allocates the necessary storage, it MUST respond with 201 (Created), including a Location and ETag header field. A server MAY elect to return the Allow-Length header field, which indicates the maximum allowed length of any subsequent partial content. If an origin server refuses to allocate the requested storage (ex: due to policy limit), it MUST respond with 422 (Unprocessable Content). It is RECOMMENDED that such a response include problem details as defined in <xref target="RFC9457"/> which explains why the content cannot be allocated. When an origin server fails to allocate storage for the resource, then it MUST respond with 507 (Insufficient Storage). If the client is not authorized to create the requested resource, the origin server MUST respond with 401 (Unauthorized) if authentication is possible; otherwise, it MUST respond with 403 (Forbidden).</t>
      <t>There is no temporal specification as to how long a client is allowed take to upload all the content ranges. A server MAY choose to implicitly cancel an upload it deems abandoned due to inactivity after an arbitrary period or after an absolute amount of time has passed. It is RECOMMENDED that an origin server which knows when the upload will be considered canceled return the Sunset header as defined in <xref target="RFC8594"/>, which indicates the cancellation date and time. <xref target="cancel-upload"/> describes how an upload is explicitly canceled.</t>
      <section anchor="the-content-disposition-header-field">
        <name>The Content-Disposition Header Field</name>
        <t>Content-Disposition is a REQUIRED header field. In its absence, the origin server MUST respond with 400 (Bad Request). This header field indicates that the origin server is to create a new storage resource and of what size.</t>
        <section anchor="create-disposition-type">
          <name>The Create Disposition Type</name>
          <t>The disposition type "create" is REQUIRED and is meant to instruct the origin server that it SHOULD preallocate the specified storage space, but the request itself does not contain a body that is to be written to storage.</t>
          <t>If a client were to send one of the existing disposition types "inline" or "attachment" to an origin server without a body, it is not clear what action the server MUST take. The disposition type "create" expresses a
client's expectation that the disposition of the origin server is to create a resource of "size" octets.</t>
        </section>
        <section anchor="disposition-parameter-size">
          <name>Disposition Parameter: 'Size'</name>
          <t>The size parameter is REQUIRED and has the same meaning as defined in Section 2.7 of <xref target="RFC2183"/>. The origin server MUST use this value as the amount of storage to allocate in octets.</t>
          <t>If a client does not provide the size parameter or the size is equal to or less than zero, the origin server MUST respond with 411 (Length Required). If the origin server refuses to allocate the requested storage, it MUST
respond with 422 (Unprocessable Content). It is RECOMMENDED that such a response include problem details as defined in <xref target="RFC9457"/> which explains why the content cannot be allocated and includes the maximum allowable size. For example,
if the requested size is too large, the server MAY respond with:</t>
          <sourcecode type="http"><![CDATA[
Content-Type: application/problem+json
Content-Language: en

{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "The requested resource size is too large."
  "detail": "1TB exceeds the 200GB maximum, allowed size.",
  "max-size": 2e+11
}
]]></sourcecode>
        </section>
        <section anchor="disposition-parameter-filename">
          <name>Disposition Parameter: 'Filename'</name>
          <t>The "filename" and "filename*" parameters are OPTIONAL parameters that have the same meaning defined in Section 4.3 of <xref target="RFC6266"/>. When specified by a client, the origin server MAY use the specified file name in lieu of the resource identifier that it elects to generate, which MAY also derive from the request URL.</t>
        </section>
        <section anchor="disposition-parameter-modification-date">
          <name>Disposition Parameter: 'Modification-Date'</name>
          <t>The modification-date parameter is OPTIONAL and has the same meaning as defined in Section 2.5 of <xref target="RFC2183"/>. When the client does not specify the modification-date parameter, the current date and time on the origin server MAY be used if the server has a clock.</t>
        </section>
      </section>
      <section anchor="allow-length">
        <name>The Allow-Length Header Field</name>
        <t>The Allow-Length response header field allows a server to communicate the allowable length of content. It provides information to clients that enables them to delimit framing as they send partial content to the server. It is RECOMMENDED that an origin server return the Allow-Length header field when a resource is provisioned for an upload.</t>
        <artwork><![CDATA[
Content-Length = 1*DIGIT
]]></artwork>
        <t>An example is</t>
        <sourcecode type="http"><![CDATA[
Allow-Length: 10000000
]]></sourcecode>
        <t>In the absence of the Allow-Length header field, a client is obligated to know the maximum length allowed through out-of-band knowledge such as a publicly documented policy or through probing requests until a suitable length is determined.</t>
        <t>An origin server MAY choose to return Allow-Length in a HEAD or OPTIONS request for a client that did not persist the value and resumes an upload at a later time. The specified Allow-Length SHOULD NOT change for the lifetime of an upload. If the value does change during an upload, then the origin server SHOULD support the HEAD method, OPTIONS method, or both, that SHALL respond with an updated Allow-Length header field.</t>
      </section>
      <section anchor="resource-contention">
        <name>Resource Contention</name>
        <t>It is possible that multiple clients MAY request an origin server provision storage for the same resource. An origin server SHOULD use optimistic behavior such that the last successful client request is the owner of the remaining upload requests. The entity tag returned by the origin server in the response provides the correlation to all other requests for a given client. If the server is unable to fulfill the request because the resource cannot be provisioned, it MUST respond with 409 (Conflict) to which a client MAY retry the request. A server MAY also return the Retry-After header field as defined in Section 10.2.3 of <xref target="RFC9110"/> to provide a hint to the client as to how long it SHOULD wait before retrying the request.</t>
        <t>It is NOT RECOMMENDED that origin servers employ a stateful locking strategy as it could result in a condition by which no client is able to create the requested resource. This document does not describe how to lock or unlock such a resource.</t>
      </section>
      <section anchor="entity-tags">
        <name>Entity Tags</name>
        <t>Upon successful allocation of the requested storage space, the origin server MUST return an entity tag in the response. The entity tag MUST be used for all subsequent requests, including canceling the entire upload. All entity tags returned by the origin server SHOULD use strong validation.</t>
      </section>
      <section anchor="resource-retrieval">
        <name>Resource Retrieval</name>
        <t>An origin server which supports partial content uploads MAY also support requesting that same resource for downloads. An origin server that implements this capability MUST NOT allow GET requests, in part or in whole, to the provisioned resource until all the corresponding resource content has been uploaded to the origin server. The origin server MUST respond with 404 (Not Found) for any resource that has not been completely uploaded.</t>
      </section>
      <section anchor="example">
        <name>Example</name>
        <t>Here is an example of a POST request to initiate a new partial content upload:</t>
        <sourcecode type="http"><![CDATA[
Content-Disposition: create; size=4294967296
]]></sourcecode>
        <t>An example response would be:</t>
        <artwork><![CDATA[
Allow-Length: 10000000
ETag: "sz8L2qGcV0SHqg8rXwALVQ=="
Location: <URL>
Sunset: Mon, 13 Nov 2023 00:00:00 GMT
]]></artwork>
      </section>
    </section>
    <section anchor="update-upload">
      <name>Update Partial Content Upload</name>
      <t>The PATCH method MUST be used to update partial content. Unlike other uses of PATCH, an origin server MUST complete this operation idempotently. Given the entity tag provided by the client and the fact that the necessary storage space has already been allocated, the origin server has enough information to safely fulfill the request idempotently. This behavior is true even if multiple client requests occur concurrently or overlap in content range.</t>
      <t>If the origin server successfully updates the specified content range and more content is expected, then it MUST respond with 202 (Accepted); otherwise, the server MUST complete the upload as described in <xref target="complete-upload"/>. If the Content-Disposition header field contained the modification-date parameter, then the origin server MUST also return this value in the response Last-Modified header field.</t>
      <section anchor="content-range-header-field">
        <name>Content-Range Header Field</name>
        <t>Content-Range is a REQUIRED header field that has the same meaning as defined in Section 14.4 of <xref target="RFC9110"/>. The Content-Range header field informs the origin server what part of the content is being uploaded.</t>
        <t>If the byte-range in Content-Range is invalid or the complete-length does not match the provisioned storage amount defined by the size parameter in the Content-Disposition header field when the partial content upload was started, the server MUST respond with 416 (Range Not Satisfiable). A client SHOULD inspect the complete-length of the Content-Range header field in the error response to determine whether the source content has been modified.</t>
      </section>
      <section anchor="last-modified-header-field">
        <name>Last-Modified Header Field</name>
        <t>Last-Modified is an OPTIONAL header field and has the same meaning as defined in Section 8.8.2 of <xref target="RFC9110"/>. If the modification-date parameter was specified in the Content-Disposition header field as part of the start of the partial content upload, then the origin server MUST respond with the Last-Modified header field containing the same value.</t>
        <t>A client MAY use the Last-Modified header field to determine whether its copy of the content being uploaded is still the same as the copy the origin server has.</t>
      </section>
      <section anchor="if-match-header">
        <name>If-Match Header Field</name>
        <t>If-Match is a REQUIRED header field. The If-Match header field MUST contain the entity tag returned by the origin server when the partial content upload was started. If a client does not specify the If-Match header field, the server MUST respond with 428 (Precondition Required). If the entity tag specified by the client does not match the value known to the server, the server MUST respond with 412 (Precondition Failed).</t>
      </section>
      <section anchor="expect-header-field">
        <name>Expect Header Field</name>
        <t>Expect is an OPTIONAL header field and has the same meaning as defined in Section 10.1.1 of <xref target="RFC9110"/>. It is still possible for partial content uploads to be large. Clients SHOULD send the 100-Continue expectation to ensure that the server is willing to accept the size of the content being sent. If the client sends more partial content than the server is willing to accept in a single request, it MUST respond with 413 (Payload Too Large). The server SHOULD also respond with the Allow-Length header field (<xref target="allow-length"/>) to indicate the maximum length allowed by the server.</t>
      </section>
      <section anchor="resource-contention-1">
        <name>Resource Contention</name>
        <t>It is possible that multiple clients MAY request that an origin server update a partial content upload for the same resource. Provided that the If-Match header field contains a valid entity tag (<xref target="if-match-header"/>), an origin server SHOULD use an optimistic behavior when copying the uploaded content to storage. If the server is unable to fulfill the request because the resource is inaccessible, it MUST respond with 409 (Conflict). Since the request MUST be idempotent, a client MAY retry a 409 error response. A server MAY also return the Retry-After header field as defined in Section 10.2.3 of <xref target="RFC9110"/> to provide a hint to the client as to how long it SHOULD wait before retrying the request.</t>
        <t>If the server is unable to fulfill the request because the allocated storage for the resource no longer exists, the server MUST respond with 410 (Gone).</t>
        <t>Retrying large content uploads MAY strain network resources and are likely to have high latency. If the origin server is aware that the storage resource is temporarily unavailable, it is RECOMMENDED that it automatically retry copying the uploaded content. The number of times the server retries, or whether that server retries at all, is at the discretion of the server.</t>
      </section>
      <section anchor="complete-upload">
        <name>Completing the Upload</name>
        <t>To complete an upload, a client MUST send all the corresponding content ranges. A client MAY vary the size of each upload; for example, it MAY increase or decrease the content range based on available network bandwidth. A server knows that the upload is complete when it has received uploads from a client that contain all of the contiguous content ranges up to the size of the total content, potentially overlapping. If the origin server determines no further content is expected, then it MUST respond with 201 (Created) and Content-Location. Content-Location indicates the URL where the client MAY retrieve the resource with a GET request, which MAY not previously be known to the client.</t>
        <t>A server SHOULD NOT be stateful. A server, however, MAY choose to store the start and end position of each content range received in external storage such as a file or database. The exact mechanism used to implement this behavior is at the discretion of the server. Once the server has made the decision that all of the content has been uploaded, it MAY allow access to the resource via the GET method that is indicated in Content-Location.</t>
      </section>
      <section anchor="example-1">
        <name>Example</name>
        <t>Here is an example of a PATCH request which uploads part of an upload:</t>
        <sourcecode type="http"><![CDATA[
Content-Type: application/octet-stream
Content-Length: 104857600
Content-Range: bytes 0-104857600/4294967296
If-Match: "sz8L2qGcV0SHqg8rXwALVQ=="
Expect: 100-continue

...<message body>...
]]></sourcecode>
      </section>
    </section>
    <section anchor="cancel-upload">
      <name>Cancel Partial Content Upload</name>
      <t>The DELETE method MUST be used to cancel a partial content upload. When a client requests that a partial content upload be canceled, the server MUST deallocate the storage previously provisioned for the upload.</t>
      <t>Only the client originator MAY cancel the content upload. The same client or a new client MAY begin a new partial content upload before the existing upload is complete. Starting a new partial content upload intrinsically cancels any existing upload.</t>
      <section anchor="if-match-header-field">
        <name>If-Match Header Field</name>
        <t>If-Match is a REQUIRED header field. The If-Match header field MUST contain the entity tag returned by the origin server when the partial content upload was started. If a client does not specify the If-Match header field, the server MUST respond with 428 (Precondition Required). If the entity tag specified by the client does not match the value known to the server, the server MUST respond with 412 (Precondition Failed).</t>
      </section>
      <section anchor="resource-contention-2">
        <name>Resource Contention</name>
        <t>It is possible that multiple clients MAY request that an origin server cancel a partial content upload for the same resource. If the server is unable to fulfill the request because the resource is inaccessible, it MUST respond with 409 (Conflict). Since the request MUST be idempotent, a client MAY retry a 409 error response. A server MAY also return the Retry-After header field as defined in Section 10.2.3 of <xref target="RFC9110"/> to provide a hint to the client as to how long it SHOULD wait before retrying the request.</t>
        <t>If the server is unable to fulfill the request because the allocated storage for the resource no longer exists, the server MUST respond with 204 (No Content) because the upload has already been canceled.</t>
      </section>
      <section anchor="example-2">
        <name>Example</name>
        <t>Here is an example of canceling an upload:</t>
        <sourcecode type="http"><![CDATA[
If-Match: "sz8L2qGcV0SHqg8rXwALVQ=="
]]></sourcecode>
      </section>
    </section>
    <section anchor="get-partial-content-upload-metadata">
      <name>Get Partial Content Upload Metadata</name>
      <t>There are situations where a client does not have the necessary information to continue uploading content. A few of these scenarios include a client losing network connectivity, pausing or suspending uploads, and resuming or retrying an upload where the previously uploaded content ranges were not persisted by the client. These scenarios MAY lead a client to request from the destination origin server what information has been already uploaded to it.</t>
      <t>The HEAD method MUST be used to request the metadata about a partial content upload. If the partial content upload metadata is successfully retrieved, the server MUST respond with 204 (No Content). If the server is unable to fulfill the request because the resource no longer exists and the server was previously aware of the resource, the server SHOULD respond with 410 (Gone). The origin server MUST, otherwise, respond with 404 (Not Found) for any resource that does not exist.</t>
      <section anchor="allow-length-header-field">
        <name>Allow-Length Header Field</name>
        <t>Allow-Length is an OPTIONAL response header field. It informs the client what the current content size limit is for any partial upload, which MAY be different from the limit reported in any previous response. It is RECOMMENDED that an origin server return the Allow-Length header field with an appropriate value, even when a limit had not been previously set.</t>
      </section>
      <section anchor="content-length-header-field">
        <name>Content-Length Header Field</name>
        <t>Content-Length is a REQUIRED response header field. The Content-Length value MUST correspond to the size parameter specified in the original Content-Disposition header field when the partial content upload was created.</t>
      </section>
      <section anchor="etag-header-field">
        <name>ETag Header Field</name>
        <t>ETag is a REQUIRED response header field. The ETag value MUST be the same value generated by the server when the partial content upload was created.</t>
      </section>
      <section anchor="last-modified-header-field-1">
        <name>Last-Modified Header Field</name>
        <t>Last-Modified is an OPTIONAL response header field. The Last-Modified header field MUST be returned if the modification-date parameter was specified in the original Content-Disposition header field when the partial content upload was created.</t>
      </section>
      <section anchor="sunset-header-field">
        <name>Sunset Header Field</name>
        <t>Sunset is an OPTIONAL response header field. If the server imposes a temporal limit on how much time a client has before it considers the upload abandoned, the server MUST return the Sunset header field containing the absolute date and time that will occur. Any date and time returned by the server SHOULD be the same value returned when the partial content upload was created.</t>
      </section>
      <section anchor="range-header-field">
        <name>Range Header Field</name>
        <t>Range is an OPTIONAL response header field. The server indicates what content the client has already uploaded by sending the Range header field as defined in Section 14.2 of <xref target="RFC9110"/>. Each range specified MUST use the byte-range unit type as defined by Section 14.1.2 of <xref target="RFC9110"/> with the exception that the first-pos and last-pos values MUST both be specified. A server MAY chose to emit a Range header field for each byte offset range or collapse them into multiple header field values. A server MAY also merge overlapping ranges in order to reduce the number of reported range values.</t>
        <t>As an example, if a client previously made 3 partial uploads and with overlapping ranges, the server can emit:</t>
        <sourcecode type="http"><![CDATA[
Range: bytes=0-999999
Range: bytes=900000-1999999
Range: bytes=2000000-2999999
]]></sourcecode>
        <t>Or:</t>
        <sourcecode type="http"><![CDATA[
Range: bytes=0-2999999
]]></sourcecode>
      </section>
      <section anchor="example-3">
        <name>Example</name>
        <t>Here is an example of a response to a HEAD request which reports the metadata for a partial content upload that is in progress:</t>
        <sourcecode type="http"><![CDATA[
Allow-Length: 10000000
Content-Length: 4294967296
ETag: "sz8L2qGcV0SHqg8rXwALVQ=="
Last-Modified: Sun, 5 Nov 2023 00:00:00 GMT
Range: bytes=0-9999999, 10000000-19999999
Range: bytes=20000000-49999999
Sunset: Mon, 13 Nov 2023 00:00:00 GMT
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document has the same security considerations that are outlined in Section 5 of <xref target="RFC2183"/> and Section 7 of <xref target="RFC6266"/>. There are additional risks from clients requesting unintentionally large resources. <xref target="new-upload"/> and <xref target="update-upload"/>
describe the validation process and how to reject such a request. The maximum sizes allowed, in whole or in part, are at the discretion of the origin server.</t>
      <t>While this document mandates that entity tags be used in requests, it does not dictate the format or content of those values. An origin server SHOULD generate an entity tag that cannot be easily replayed. A few possible techniques might
include rotating the entity tag during each request as well as encrypting or signing a value in the entity tag using a client certificate. These protective measures would be in addition to transport-level security, client authentication,
and client authorization.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="the-create-disposition-type">
        <name>The Create Disposition Type</name>
        <t>This document registers a new "disposition-type" value for the Content-Disposition header: create. The definition and usage of this value is described in <xref target="create-disposition-type"/>. IANA is asked to add a new "disposition-type" value to
the Content-Disposition header as defined by <xref target="RFC2183"/>:</t>
        <t>create: allocate a resource of "size" octets without a body</t>
        <t>The "size" parameter is REQUIRED. The "filename", "creation-date", "modification-date", and "read-date" are OPTIONAL. Any other parameters are unused and SHOULD be ignored.</t>
      </section>
      <section anchor="the-allow-length-response-header-field">
        <name>The Allow-Length Response Header Field</name>
        <t>This document requests that the Allow-Length response header field be added to the "Permanent Message Header Field Names" registry (see <xref target="RFC3864"/>), taking into account the guidelines given by <xref target="RFC9110"/>.</t>
        <t>Header Field Name: Allow-Length</t>
        <t>Protocol: http</t>
        <t>Status: standard</t>
        <t>Author/Change controller: IETF</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <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.</t>
              <t>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="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC8594">
          <front>
            <title>The Sunset HTTP Header Field</title>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This specification defines the Sunset HTTP response header field, which indicates that a URI is likely to become unresponsive at a specified point in the future. It also defines a sunset link relation type that allows linking to resources providing information about an upcoming resource or service sunset.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8594"/>
          <seriesInfo name="DOI" value="10.17487/RFC8594"/>
        </reference>
        <reference anchor="RFC9457">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="S. Dalal" initials="S." surname="Dalal"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
              <t>This document obsoletes RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9457"/>
          <seriesInfo name="DOI" value="10.17487/RFC9457"/>
        </reference>
        <reference anchor="RFC6266">
          <front>
            <title>Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)</title>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>RFC 2616 defines the Content-Disposition response header field, but points out that it is not part of the HTTP/1.1 Standard. This specification takes over the definition and registration of Content-Disposition, as used in HTTP, and clarifies internationalization aspects. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6266"/>
          <seriesInfo name="DOI" value="10.17487/RFC6266"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC3864">
          <front>
            <title>Registration Procedures for Message Header Fields</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <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>
        <reference anchor="RFC2183">
          <front>
            <title>Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field</title>
            <author fullname="R. Troost" initials="R." surname="Troost"/>
            <author fullname="S. Dorner" initials="S." surname="Dorner"/>
            <author fullname="K. Moore" initials="K." role="editor" surname="Moore"/>
            <date month="August" year="1997"/>
            <abstract>
              <t>This memo provides a mechanism whereby messages conforming to the MIME specifications [RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049] can convey presentational information. It specifies the "Content- Disposition" header field, which is optional and valid for any MIME entity ("message" or "body part"). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2183"/>
          <seriesInfo name="DOI" value="10.17487/RFC2183"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="XHR" target="https://xhr.spec.whatwg.org/">
          <front>
            <title>XMLHttpRequest, Living Standard</title>
            <author initials="A." surname="van Kesteren" fullname="Anne van Kesteren">
              <organization/>
            </author>
            <date year="2023" month="September"/>
          </front>
        </reference>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org/">
          <front>
            <title>Fetch Standard</title>
            <author>
              <organization abbrev="WHATWG">Web Hypertext Application Technology Working Group</organization>
            </author>
            <date year="2024" month="March"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 353?>

<section numbered="false" anchor="appendix-a-content-disposition-versus-content-length">
      <name>Appendix A. Content-Disposition Versus Content-Length</name>
      <t>The Content-Length header field defined in Section 8.6 of <xref target="RFC9110"/> is the most appropriate header field to indicate the size of the intended content being uploaded. As Section 8 of <xref target="RFC9110"/> indicates, a "representation" can be anything. In this document, the "representation" would be the allocated storage for the content to be uploaded, such as a file.</t>
      <t>The client scripting engines of modern browsers use the XMLHttpRequest (XHR) API and Fetch Standard. Section 4.5.2 in the <xref target="XHR"/> specification and Section 2.2.2 in the <xref target="FETCH"/> specification both state that the Content-Length header is restricted and is only allowed to be set by the browser. The inability to set the Content-Length header without a body makes it an unusable header field as it relates to this document.</t>
      <t>In lieu of defining a new header field, this document elected to use the existing Content-Disposition header field defined in <xref target="RFC2183"/> and <xref target="RFC6266"/> to serve the same purpose.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The author would like to thank James Zimmerman, Hongtao Chen, and Xavier John for their valuable contributions and reviews.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
O5RkAAA=

-->

</rfc>
