<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpapi-patch-byterange-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title>Byte Range PATCH</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-patch-byterange-05"/>
    <author initials="A." surname="Wright" fullname="Austin Wright">
      <organization/>
      <address>
        <email>aaa@bzfx.net</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <workgroup>Building Blocks for HTTP APIs</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>HTTP</keyword>
    <abstract>
      <?line 37?>

<t>This document specifies a media type for PATCH payloads that overwrites a specific byte range, facilitating random access writes and segmented uploads of resources.</t>
    </abstract>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Filesystem interfaces typically provide mechanisms to write at a specific position in a file. While HTTP supports reading byte ranges using the Range header (<xref section="14" sectionFormat="of" target="RFC9110"/>), this technique cannot generally be used with PUT, as the server may ignore the Content-Range header, potentially causing data corruption. By using the PATCH method with a media type that the server understands, writing to byte ranges with Content-Range semantics becomes possible, even when server support is uncertain.</t>
      <t>This media type is intended for use in a wide variety of applications including idempotently writing to a stream, appending data to a file, overwriting specific byte ranges, or writing to multiple regions in a single operation (for example, appending audio to a recording in progress while updating metadata at the beginning of the file).</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</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.</t>
        <t>This document uses ABNF as defined in <xref target="RFC5234"/> and imports grammar rules from <xref target="RFC9651"/> and <xref target="RFC9112"/>.</t>
        <t>For brevity, example HTTP requests or responses may add newlines or whitespace,
or omit some headers necessary for message transfer.</t>
        <t>The term "byte" is used in the <xref target="RFC9110"/> sense to mean "octet." Ranges are zero-indexed and inclusive. For example, "bytes 0-0" means the first byte of the document, and "bytes 1-2" is a range with two bytes, starting one byte into the document. Ranges of zero bytes are described by an address offset rather than a range. For example, "at byte 5" would separate the byte ranges 0-4 and 5-9.</t>
      </section>
    </section>
    <section anchor="modifying-a-content-range-with-patch">
      <name>Modifying a Content Range with PATCH</name>
      <t>Sending a Content-Range field in a PUT request (A "partial PUT", <xref section="14.5" sectionFormat="comma" target="RFC9110"/>) requires server support to be processed correctly. Without such support, the server's normal behavior would be to ignore the header, replacing the entire resource with just the part that changed, potentially causing corruption. To mitigate this, Content-Range may be used in conjunction with the PATCH method <xref target="RFC5789"/> and a media type whose semantics are to write at the specified byte offset. This document re-uses the "multipart/byteranges" media type, and defines the "message/byterange" and "application/byteranges" media types, to opportunistically carry this field.</t>
      <t>A byte range patch lists one or more <em>parts</em>. Each part specifies two essential components:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Part fields</strong>: a list of HTTP fields that specify metadata, including the range being written to, the length of the body, and information about the target document that cannot be listed in the PATCH headers, e.g. Content-Type (where it would describe the patch itself, rather than the document being updated).</t>
        </li>
        <li>
          <t><strong>A part body</strong>: the actual data to write to the specified location.</t>
        </li>
      </ol>
      <t>Each part MUST indicate a single contiguous range to be written to. Servers MUST reject byte range patches that don't contain a known range (such as one given by the Content-Range or Content-Offset field) with a 422 (Unprocessable Content) or 400 (Bad Request) status code. (This would mean the client may be using a yet-undefined mechanism to specify the target range.)</t>
      <t>The simplest form to represent a byte range patch is the "message/byterange" media type, which is similar to an HTTP message:</t>
      <sourcecode type="example"><![CDATA[
Content-Range: bytes 2-5/12

wxyz
]]></sourcecode>
      <t>This patch instructs the server to write the four bytes "wxyz" at an offset of 2 bytes. Given a document containing the digits 0-9 terminated by a CRLF, the result after applying the patch would be:</t>
      <artwork><![CDATA[
01wxyz6789␍␊
]]></artwork>
      <t>Although this example is a text document, part bodies are binary data, and may overwrite individual bytes of multi-byte characters.</t>
      <section anchor="the-content-range-field">
        <name>The Content-Range Field</name>
        <t>The Content-Range field (as seen inside a patch document) is used to specify where in the target document the part body will be written.</t>
        <t>The client MAY indicate the anticipated final size of the document by providing the complete-length form, for example the "12" in <tt>bytes 0-11/12</tt>. The complete-length does not affect the write by itself, however the server MAY use it for other purposes, especially for preallocating disk space, or deciding when an upload in multiple parts has finished.</t>
        <t>If the client does not know or care about the final length of the document, it MAY use <tt>*</tt> in place of complete-length. For example, <tt>bytes 0-11/*</tt>. Most random access writes will take this form.</t>
        <t>The unsatisfied-range form (e.g. <tt>bytes */1000</tt>) sets the size of the document, but without writing any data. It may be used to truncate a document (to invert an append operation), to allocate space for a document without specifying any of its contents, or to signal that an upload has ended when the previous part or request did not specify a complete-length. The part body MUST be empty.</t>
        <t>If the "last-pos" is unknown because the upload is indeterminate length (the Content-Length of the request is not known from the start, or the upload might continue indefinitely), then the Content-Offset field must be used instead.</t>
      </section>
      <section anchor="the-content-length-field">
        <name>The Content-Length Field</name>
        <t>A "Content-Length" part field, if provided, describes the length of the part body. (To describe the size of the entire target resource, see the Content-Range field.)</t>
        <t>If provided, it MUST exactly match the length of the range specified in the Content-Range field, and servers MUST error when the Content-Length mismatches the length of the range provided in Content-Range.</t>
      </section>
      <section anchor="content-offset-field">
        <name>The Content-Offset Field</name>
        <t>The Content-Offset field specifies an offset to write the content at, when the end of the write is not known. It is used instead of Content-Range when the Content-Length is not known.</t>
        <t>Its syntax is specified as a Structured Field <xref target="RFC9651"/>:</t>
        <sourcecode type="abnf"><![CDATA[
Content-Offset = sf-item
]]></sourcecode>
        <t>The value indicates how much of the target document is to be skipped over, typically the number of bytes. It MUST be an sf-integer.</t>
        <t>It accepts two parameters:</t>
        <t>The "unit" parameter indicates the unit associated with the value. A missing "unit" parameter is equivalent to providing <tt>unit=bytes</tt>.</t>
        <t>The "complete-length" parameter is equivalent to the complete-length value in Content-Range. When provided, it MUST be an sf-integer specifying the intended final length of the document. A missing "complete-length" is equivalent to providing <tt>*</tt> in Content-Range.</t>
      </section>
      <section anchor="the-content-type-field">
        <name>The Content-Type Field</name>
        <t>A "Content-Type" part field MUST have the same effect as if provided in a PUT request uploading the entire resource (patch applied).
Its use is typically limited to resource creation.</t>
      </section>
      <section anchor="other-fields">
        <name>Other Fields</name>
        <t>Other part fields in the patch document SHOULD have the same meaning as if it is a message-level header in a PUT request uploading the entire resource (patch applied).</t>
        <t>Use of such fields SHOULD be limited to cases where the meaning in the HTTP request headers would be different, where they would describe the entire patch, rather than the part body. For example, the "Content-Type" or "Content-Location" fields.</t>
      </section>
      <section anchor="applying-a-patch">
        <name>Applying a Patch</name>
        <t>Servers SHOULD NOT accept requests that write beyond, and not adjacent to, the end of the resource. This would create a sparse file, where some bytes are undefined. For example, writing at byte 601 of a resource where bytes 0-599 are defined; this would leave byte 600 undefined. Servers that accept sparse writes MUST NOT disclose uninitialized content, and SHOULD fill in undefined regions with zeros.</t>
        <t>The expected length of the write can be computed from the part fields. If the actual length of the part body mismatches the expected length, this MUST be treated the same as a network interruption at the shorter length, but anticipating the longer length. Recovering from this interruption may involve rolling back the entire request, or saving as many bytes as possible. The client can then recover as it would recover from a network interruption.</t>
      </section>
      <section anchor="range-units">
        <name>Range Units</name>
        <t>Currently, the only defined range unit is "bytes", however this may be other, yet-to-be-defined values.</t>
        <t>In the case of "bytes", the bytes that are read are exactly the same as the bytes that are changed. However, other units may define write semantics different from a read, if symmetric behavior would not make sense. For example, if a Content-Range field adds an item in a JSON array, this write may add a leading or trailing comma, not technically part of the item itself, in order to keep the resulting document well-formed.</t>
        <t>Even though the length in alternate units isn't changed, the byte length might. This might only be acceptable to servers storing these values in a database or memory structure, rather than on a byte-based filesystem.</t>
      </section>
    </section>
    <section anchor="byterange-media-types">
      <name>Byterange Media Types</name>
      <section anchor="the-multipartbyteranges-media-type">
        <name>The multipart/byteranges Media Type</name>
        <t>The following illustrates a request with a "multipart/byteranges" body to write two ranges in a document:</t>
        <sourcecode type="example"><![CDATA[
PATCH /uploads/foo HTTP/1.1
Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
Content-Length: 205
If-Match: "xyzzy"
If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT

--THIS_STRING_SEPARATES
Content-Range: bytes 2-6/25
Content-Type: text/plain

23456
--THIS_STRING_SEPARATES
Content-Range: bytes 17-21/25
Content-Type: text/plain

78901
--THIS_STRING_SEPARATES--
]]></sourcecode>
        <t>The syntax for multipart messages is defined in <xref section="5.1.1" sectionFormat="comma" target="RFC2046"/>. While the body cannot contain the boundary, servers MAY use the Content-Length field to skip to the boundary (potentially ignoring a boundary in the body, which would be an error by the client). Content-Range MUST NOT be used in place of Content-Length for this purpose.</t>
        <t>The multipart/byteranges type may be used for operations where multiple regions must be updated at the same time; clients expect all the changes to be recorded as a single operation, or that if there's an interruption, all of the parts will be rolled back together. However, the exact behavior is at the discretion of the server.</t>
      </section>
      <section anchor="message-byterange">
        <name>The message/byterange Media Type</name>
        <t>When making a request with a single byte range, there is no need for a multipart boundary marker. This document defines a new media type "message/byterange" with the same semantics as a single byte range in a multipart/byteranges message, but with a simplified syntax that only needs to be parsed to the first empty line.</t>
        <t>The "message/byterange" form may be used in a PATCH request as so:</t>
        <sourcecode type="example"><![CDATA[
PATCH /uploads/foo HTTP/1.1
Content-Type: message/byterange
Content-Length: 262
If-Match: "xyzzy"
If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT

Content-Range: bytes 100-299/600
Content-Type: text/plain

[200 bytes...]
]]></sourcecode>
        <t>This represents a request to modify a 600-byte document, starting at a 100-byte offset, overwriting 200 bytes of it.</t>
        <section anchor="syntax">
          <name>Syntax</name>
          <t>The syntax re-uses concepts from the "multipart/byteranges" media type, except it omits the multipart separator, and so only allows a single range to be specified. It is also similar to the "message/http" media type, except the first line (the status line or request line) is omitted; a message/byterange document can be fed into a message/http parser by first prepending a line like "PATCH / HTTP/1.1".</t>
          <t>It follows the syntax of HTTP message headers and body. It MUST include either the Content-Range or the Content-Offset field. If the message length is known by the sender, it SHOULD contain the Content-Length header field. Unknown or nonapplicable header fields MUST be ignored.</t>
          <t>The field-line and message-body productions are specified in <xref target="RFC9112"/>.</t>
          <sourcecode type="abnf"><![CDATA[
byterange-document = *( field-line CRLF )
                     CRLF
                     [ message-body ]
]]></sourcecode>
          <t>This document has the same semantics as a single part in a "multipart/byteranges" document (<xref section="5.1.1" sectionFormat="of" target="RFC2046"/>) or any response with a 206 (Partial Content) status code (<xref section="15.3.7" sectionFormat="of" target="RFC9110"/>). A "message/byterange" document may be trivially transformed into a "multipart/byteranges" document by prepending a dash-boundary and CRLF, and appending a close-delimiter (a CRLF, dash-boundary, terminating "<tt>--</tt>", and optional CRLF).</t>
        </section>
      </section>
      <section anchor="message-binary">
        <name>The application/byteranges Media Type</name>
        <t>The "application/byteranges" has the same semantics as "multipart/byteranges" but follows a binary format similar to "message/bhttp" <xref target="RFC9292"/>, which may be more suitable for some clients and servers, as all variable length strings are tagged with their length.</t>
        <section anchor="syntax-1">
          <name>Syntax</name>
          <t>Parsing starts by looking for a "Known-Length Message" or an "Indeterminate-Length Message". One or the other is distinguished by reading the Framing Indicator.</t>
          <t>The remainder of the message is parsed by reading fields, then the content, by a method depending on if the message is known-length or indeterminate-length. If there are additional parts, they begin immediately after the end of a Content.</t>
          <t>The "Known-Length Field Section", "Known-Length Content", "Indeterminate-Length Field Section", "Indeterminate-Length Content", "Indeterminate-Length Content Chunk", "Field Line" definitions are identical to their definition in message/bhttp. They are used in one or more Known-Length Message and/or Indeterminate-Length Message productions, concatenated together.</t>
          <t>This syntax uses the notation from <xref section="1.3" sectionFormat="of" target="RFC9000"/>. Fields marked "(i)" are variable-length integers, encoded as described in <xref section="16" sectionFormat="of" target="RFC9000"/>.</t>
          <artwork><![CDATA[
Patch {
  Message (..) ...
}

Known-Length Message {
  Framing Indicator (i) = 8,
  Known-Length Field Section (..),
  Known-Length Content (..),
}

Indeterminate-Length Message  {
  Framing Indicator (i) = 10,
  Indeterminate-Length Field Section (..),
  Indeterminate-Length Content (..),
}

Known-Length Field Section {
  Length (i),
  Field Line (..) ...,
}

Known-Length Content {
  Content Length (i),
  Content (..),
}

Indeterminate-Length Field Section {
  Field Line (..) ...,
  Content Terminator (i) = 0,
}

Indeterminate-Length Content {
  Indeterminate-Length Content Chunk (..) ...,
  Content Terminator (i) = 0,
}

Indeterminate-Length Content Chunk {
  Chunk Length (i) = 1..,
  Chunk (..),
}

Field Line {
  Name Length (i) = 1..,
  Name (..),
  Value Length (i),
  Value (..),
}
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="prefer-transaction">
      <name>Preserving Incomplete Uploads with "Prefer: transaction"</name>
      <t>The stateless design of HTTP generally implies that a request is atomic (otherwise parties would need to keep track of the state of a request while it's in progress). Clients need not be concerned with the side-effects of error halfway through an upload.</t>
      <t>However, some clients may desire partial state changes, particularly when remaking the upload is more expensive than recovering from an interruption. In these cases, clients will prefer the incomplete upload to be preserved as much as possible, so they may resume from where the incomplete request was terminated.</t>
      <t>The client's preference for atomic or upload-preserving behavior may be signaled by a Prefer header:</t>
      <artwork><![CDATA[
Prefer: transaction=atomic
Prefer: transaction=persist
]]></artwork>
      <t>The <tt>transaction=atomic</tt> preference indicates that the request SHOULD commit only when a successful response is returned, and not any time before the end of the upload.</t>
      <t>The <tt>transaction=persist</tt> preference indicates that uploaded data SHOULD be continuously committed, so that if the upload is interrupted, it is possible to resume the upload from where it left off.</t>
      <t>This preference is generally applicable to any HTTP request (and not merely for PATCH or byte range patches). Servers SHOULD indicate when this preference was honored, using a "Preference-Applied" response header. For example:</t>
      <artwork><![CDATA[
Preference-Applied: transaction=persist
]]></artwork>
      <t>Servers might consider signaling this in a 103 (Early Hints) response <xref target="RFC8297"/>, since once the final response is written, this may no longer be useful information.</t>
    </section>
    <section anchor="discovery-with-accept-patch">
      <name>Discovery with Accept-Patch</name>
      <t>Servers SHOULD indicate support for supported patch types in the <tt>Accept-Patch</tt> response field <xref target="RFC5789"/>.</t>
      <t>A server that supports byterange media types defined in this document should respond to an OPTIONS request as follows:</t>
      <sourcecode type="example"><![CDATA[
HTTP/1.1 204 No Content
Allow: GET, HEAD, PUT, PATCH, OPTIONS
Accept-Patch: message/byterange, multipart/byteranges
]]></sourcecode>
      <t>A server should also advertise supported patch formats in response to a failed or conditional PATCH request, allowing the client to retry with a supported format:</t>
      <sourcecode type="example"><![CDATA[
HTTP/1.1 415 Unsupported Media Type
Accept-Patch: message/byterange, multipart/byteranges
Content-Type: text/plain

This server supports byte-range patches using the
message/byterange or multipart/byteranges media types.
]]></sourcecode>
    </section>
    <section anchor="segmented-document-creation-with-patch">
      <name>Segmented Document Creation with PATCH</name>
      <t>As an alternative to using PUT to create a new resource, the contents of a resource may be uploaded in segments, written across several PATCH requests.</t>
      <t>A user-agent may also use PATCH to recover from an interrupted PUT request, if it was expected to create a new resource. The server will store the data sent to it by the user agent, but will not finalize the upload until the complete length of the document is known and received.</t>
      <ol spacing="normal" type="1"><li>
          <t>The client makes a PUT or PATCH request to a URL, a portion of which is randomized, to be unpredictable to other clients. This first request creates the resource, and should include <tt>Prefer: transaction=persist</tt> (to continuously persist the upload) and <tt>If-None-Match: *</tt> (to verify the target does not exist). If a PUT request, the server reads the Content-Length header and stores the intended complete length of the document. If a PATCH request, the "Content-Range" field in the "message/byterange" patch is read for the complete length. The complete length may also be undefined, and defined in a later request.</t>
        </li>
        <li>
          <t>If any request is interrupted, the client may make a HEAD request to determine how much, if any, of the previous response was stored. A <tt>Content-Length</tt> response header indicates what the size of an equivalent GET request would have been. Since this will be content uploaded in the interrupted attempt, this is the offset where the next request can resume uploading from.</t>
        </li>
        <li>
          <t>If the client sees from the HEAD response that additional data remains to be uploaded, it may make a PATCH request to resume uploading. Even if no data was uploaded or the resource was not created, the client should attempt creating the resource with PATCH to mitigate the possibility of another interrupted connection with a server that does not save incomplete transfers. However if in response to PATCH, the server reports 405 (Method Not Allowed), 415 (Unsupported Media Type), or 501 (Not Implemented), then the client must resort to retrying the PUT request.</t>
        </li>
        <li>
          <t>The server detects the completion of the final request when the current received data matches the indicated complete length. For example, a <tt>Content-Range: bytes 500-599/600</tt> field is a write at the end of the resource. The server processes the upload and returns a response for it.</t>
        </li>
      </ol>
      <t>If the client does not know the complete length of its upload (for example, an upload of live audio), it may use the indeterminate length form "*" to append data to the document. The end of the upload is then signaled with an "unsatisfied-range" form (e.g. <tt>Content-Range: bytes */1000</tt>), which instructs the server that the upload is complete if it has received all 1000 bytes.</t>
      <t>For building POST endpoints that support large uploads, clients can first upload the data to a scratch file as described above, and then submit a link to the file in a POST request.</t>
      <t>For updating an existing large file, the client can upload to a scratch file, then execute a MOVE (<xref section="9.9" sectionFormat="of" target="RFC4918"/>) over the intended target.</t>
      <section anchor="complete-length-example">
        <name>Complete Length Example</name>
        <t>This example shows how to upload a 600-byte document over multiple requests with PATCH, 200 bytes at a time.</t>
        <t>The first PATCH request creates the resource:</t>
        <sourcecode type="example"><![CDATA[
PATCH /uploads/foo HTTP/1.1
Content-Type: message/byterange
Content-Length: 281
If-None-Match: *

Content-Range: bytes 0-199/600
Content-Type: text/plain
Content-Length: 200

[200 bytes...]
]]></sourcecode>
        <t>This request allocates a 600 byte document, and uploads the first 200 bytes of it. The server responds with 201 (Created), indicating that the resource was created and the complete request was stored.</t>
        <t>Additional requests upload the remainder of the document:</t>
        <sourcecode type="example"><![CDATA[
PATCH /uploads/foo HTTP/1.1
Content-Type: message/byterange
Content-Length: 283

Content-Range: bytes 200-399/600
Content-Type: text/plain
Content-Length: 200

[200 bytes...]
]]></sourcecode>
        <t>This second request also returns 200 (OK).</t>
        <t>A third request uploads the final portion of the document:</t>
        <sourcecode type="example"><![CDATA[
PATCH /uploads/foo HTTP/1.1
Content-Type: message/byterange
Content-Length: 283

Content-Range: bytes 400-599/600
Content-Type: text/plain
Content-Length: 200

[200 bytes...]
]]></sourcecode>
        <t>The server responds with 200 (OK). Since this completely writes out the 600-byte document, the server may also perform final processing, for example, checking that the document is well formed. The server MAY return an error code if there is a syntax or other error, or in an earlier response as soon as it is able to detect an error, however the exact behavior is left undefined.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="messagebyterange">
        <name>message/byterange</name>
        <t>IANA is asked to register the following media type in the "Media Types" registry.</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>byterange</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>See <xref target="security-considerations"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>See <xref target="message-byterange"/> of this document</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>HTTP applications that process filesystem-like writes to locations within a resource.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>None.</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IESG</t>
          </dd>
        </dl>
      </section>
      <section anchor="applicationbyteranges">
        <name>application/byteranges</name>
        <t>IANA is asked to register the following media type in the "Media Types" registry.</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>byteranges</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>See <xref target="security-considerations"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>See <xref target="message-binary"/> of this document</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>HTTP applications that process filesystem-like writes to locations within a resource.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>None.</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IESG</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-offset">
        <name>Content-Offset</name>
        <t>IANA is asked to register the following field in the "Hypertext Transfer Protocol (HTTP) Field Name Registry".</t>
        <dl>
          <dt>Field name:</dt>
          <dd>
            <t>Content-Offset</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Structured Type:</dt>
          <dd>
            <t>Item</t>
          </dd>
          <dt>Specification document:</dt>
          <dd>
            <t><xref target="content-offset-field"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="transaction-preference">
        <name>"transaction" preference</name>
        <t>IANA is asked to register the following preference in the "HTTP Preferences" registry (<xref section="5.1" sectionFormat="of" target="RFC7240"/>).</t>
        <dl>
          <dt>Preference:</dt>
          <dd>
            <t>transaction</t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>either "atomic" or "persist"</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>Specify if the client would prefer incomplete uploads to be saved, or committed only on success.</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="prefer-transaction"/></t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="uninitialized-ranges">
        <name>Uninitialized ranges</name>
        <t>A byterange patch may permit writes to offsets beyond the end of the resource. This may have non-obvious behavior.</t>
        <t>Servers supporting sparse files MUST NOT return uninitialized memory or storage contents. Uninitialized regions may be initialized prior to executing the write, or this may be left to the filesystem if it can guarantee that unallocated space will be read as a constant value.</t>
      </section>
      <section anchor="initializing-large-documents">
        <name>Initializing large documents</name>
        <t>A byte range patch typically only requires server resources proportional to the patch size. One exception is pre-initializing space when growing a file. This occurs when a complete-length is specified in the Content-Range field, which hints at the final upload size, or when writing to an offset far after the end of the file, and the server initializes the space in between. This initialization could be a very expensive operation compared to the actual size of the patch.</t>
        <t>In general, servers SHOULD treat an initialization towards resource limits, and issue a 400 (Bad Request) as appropriate. Note that 413 (Content Too Large) would be misleading in this situation, as it would indicate the patch itself is too large, and the client should break up the patches into smaller chunks, rather than the intended signal that the final upload size is too large.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-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"/>
            <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="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="RFC9651">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <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.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
        <reference anchor="RFC9112">
          <front>
            <title>HTTP/1.1</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 specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="RFC7240">
          <front>
            <title>Prefer Header for HTTP</title>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>This specification defines an HTTP header field that can be used by a client to request that certain behaviors be employed by a server while processing a request.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7240"/>
          <seriesInfo name="DOI" value="10.17487/RFC7240"/>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC9292">
          <front>
            <title>Binary Representation of HTTP Messages</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document defines a binary format for representing HTTP messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9292"/>
          <seriesInfo name="DOI" value="10.17487/RFC9292"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </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>
        <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC4918">
          <front>
            <title>HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)</title>
            <author fullname="L. Dusseault" initials="L." role="editor" surname="Dusseault"/>
            <date month="June" year="2007"/>
            <abstract>
              <t>Web Distributed Authoring and Versioning (WebDAV) consists of a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, URL namespace manipulation, and resource locking (collision avoidance).</t>
              <t>RFC 2518 was published in February 1999, and this specification obsoletes RFC 2518 with minor revisions mostly due to interoperability experience. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4918"/>
          <seriesInfo name="DOI" value="10.17487/RFC4918"/>
        </reference>
        <reference anchor="RFC5789">
          <front>
            <title>PATCH Method for HTTP</title>
            <author fullname="L. Dusseault" initials="L." surname="Dusseault"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification. The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5789"/>
          <seriesInfo name="DOI" value="10.17487/RFC5789"/>
        </reference>
        <reference anchor="RFC8297">
          <front>
            <title>An HTTP Status Code for Indicating Hints</title>
            <author fullname="K. Oku" initials="K." surname="Oku"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>This memo introduces an informational HTTP status code that can be used to convey hints that help a client make preparations for processing the final response.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8297"/>
          <seriesInfo name="DOI" value="10.17487/RFC8297"/>
        </reference>
      </references>
    </references>
    <?line 596?>

<section anchor="discussion">
      <name>Discussion</name>
      <t><cref anchor="_4">This section to be removed before final publication.</cref></t>
      <section anchor="sparse-and-noncontiguous-resources">
        <name>Sparse and Noncontiguous Resources</name>
        <t>This pattern can enable multiple, parallel uploads to a document at the same time. For example, uploading a large log file from multiple devices. However, this document does not define any ways for clients to track the unwritten regions in sparse documents, and the existing conditional request headers are designed to cause conflicts. Parallel uploads may require a byte-level locking scheme or conflict-free operators. This may be addressed in a later document.</t>
      </section>
      <section anchor="recovering-from-interrupted-put">
        <name>Recovering from interrupted PUT</name>
        <t>Servers do not necessarily save the results of an incomplete upload; since most clients prefer atomic writes, many servers will discard an incomplete upload. A mechanism to indicate a preference for atomic vs. non-atomic writes may be defined at a later time.</t>
        <t>Byte range PATCH cannot by itself provide recovery from an interrupted PUT to an existing document, as it is not generally possible to distinguish what was received by the server from what already existed.</t>
        <t>One technique would be to use a 1xx interim response to indicate a location where the partial upload is being stored. If PUT request is interrupted, the client can make PATCH requests to this temporary, non-atomic location to complete the upload. When the last part is uploaded, the original interrupted PUT request will finish.</t>
        <t>Another technique would be to send a 1xx interim response to indicate how much of the upload has been committed. When a client receives this, it can skip that many bytes from the next attempt in a PATCH request.</t>
      </section>
      <section anchor="splicing-and-binary-diff">
        <name>Splicing and Binary Diff</name>
        <t>Operations more complicated than standard filesystem operations are out of scope for this media type. A feature of byte range patch is an upper limit on the complexity of applying the patch. In contrast, prepending, splicing, replace, or other complicated file operations could potentially require the entire file on disk be rewritten.</t>
        <t>Consider registering a media type for VCDIFF in this document, under the topic of "Media type registrations for byte-level patching".</t>
      </section>
      <section anchor="ending-indeterminate-length-uploads">
        <name>Ending Indeterminate Length Uploads</name>
        <t>When uploading a patch with indeterminate-length form, Since the server doesn't know the complete-length, it might not be able to assume that the end of the request is also the end of the whole document, even if the request ended cleanly (the client may have reasons to split apart the upload). This needs to be signaled by a subsequent request with an unsatisfied-range specifying the final length of the document.</t>
      </section>
      <section anchor="reading-content-range-and-content-offset-in-the-headers">
        <name>Reading Content-Range and Content-Offset in the headers</name>
        <t>Some parties may prefer that the message body need not be parsed at all, but instead leverage existing HTTP mechanisms to carry the part field data. Similar to how a 206 status code indicates that the response body is partial, a reserved value of Content-Type (in a PATCH request) could signal the server to read the Content-Range from the request headers, and the whole request body is the part body.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
