<?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.29 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpapi-digest-fields-problem-types-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title>HTTP Problem Types for Digest Fields</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-digest-fields-problem-types-01"/>
    <author fullname="Marius Kleidl">
      <organization>Transloadit</organization>
      <address>
        <email>marius@transloadit.com</email>
      </address>
    </author>
    <author fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <author initials="R." surname="Polli" fullname="Roberto Polli">
      <organization>Par-Tec</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>robipolli@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="April" day="25"/>
    <area>Web and Internet Transport</area>
    <workgroup>Building Blocks for HTTP APIs</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 51?>

<t>This document specifies problem types that servers can use in responses to problems encountered while dealing with a request carrying integrity fields and integrity preference fields.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-httpapi.github.io/digest-fields-problem-types/draft-ietf-httpapi-digest-fields-problem-types.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpapi-digest-fields-problem-types/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Building Blocks for HTTP APIs Working Group mailing list (<eref target="mailto:httpapi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/httpapi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/httpapi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-httpapi/digest-fields-problem-types"/>.</t>
    </note>
  </front>
  <middle>
    <?line 55?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="DIGEST"/> defines HTTP fields for exchanging integrity digests and preferences, but does not specify, require or recommend any specific behavior for error handling relating to integrity by design. The responsibility is instead delegated to applications. This draft defines a set of problem types (<xref target="PROBLEM"/>) that can be used by server applications to indicate that a problem was encountered while dealing with a request carrying integrity fields and integrity preference fields.</t>
      <t>For example, a request message may include content alongside <tt>Content-Digest</tt> and <tt>Repr-Digest</tt> fields that use a digest algorithm the server does not support. An application could decide to reject this request because it cannot validate the integrity. Using a problem type, the server can provide machine-readable error details to aid debugging or error reporting, as shown in the following example.</t>
      <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
Want-Content-Digest: sha-512=3, sha-256=10

{
  "type": "https://iana.org/assignments/http-problem-types#\
    digest-unsupported-algorithm",
  "title": "hashing algorithm is not supported",
  "unsupported-algorithm": "foo",
  "header": "Wand-Content-Digest"
}
]]></sourcecode>
    </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>
      <?line -18?>

<t>Some examples in this document contain long lines that may be folded, as described in <xref target="RFC8792"/>.</t>
      <t>The terms "integrity fields" and "integrity preference fields" in this document are to be
interpreted as described in <xref target="DIGEST"/>.</t>
      <t>The term "problem type" in this document is to be
interpreted as described in <xref target="PROBLEM"/>.</t>
      <t>The terms "request", "response", "intermediary", "sender", and "server" are from <xref target="HTTP"/>.</t>
    </section>
    <section anchor="problem-types">
      <name>Problem Types</name>
      <t>The following section defines three problem types to express common problems that occur when handling integrity or integrity preference fields on the server. These problem types use the <tt>digest-</tt> prefix in their type URI. Other problem types that are defined outside this document, yet specific to digest related problems, may reuse this prefix.</t>
      <section anchor="unsupported-hashing-algorithm">
        <name>Unsupported Hashing Algorithm</name>
        <t>This section defines the "https://iana.org/assignments/http-problem-types#digest-unsupported-algorithm" problem type.
A server <bcp14>MAY</bcp14> use this problem type if it wants to communicate to the client that
one of the hashing algorithms referenced in the integrity or integrity preference fields present in the request
is not supported.</t>
        <t>Two problem type extension members are defined, which <bcp14>SHOULD</bcp14> be populated for all responses using this problem type:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>unsupported-algorithm</tt> extension member identifies the unsupported algorithm from the request. Its value is the corresponding algorithm key.</t>
          </li>
          <li>
            <t>The <tt>header</tt> extension member as defined in <xref target="identifying-problem-causing-headers"/>.</t>
          </li>
        </ul>
        <t>The response can include the corresponding integrity preference field to indicate the server's algorithm support and preference.</t>
        <t>This problem type is a hint to the client about algorithm support, which the client could use to retry the request with a different, supported, algorithm.</t>
        <t>Example:</t>
        <figure>
          <name>A request with a sha-256 integrity field, which is not supported by the server</name>
          <sourcecode type="http-message"><![CDATA[
POST /books HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept: application/json
Accept-Encoding: identity
Repr-Digest: sha-256=:mEkdbO7Srd9LIOegftO0aBX+VPTVz7/CSHes2Z27gc4=:

{"title": "New Title"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response indicating the problem and advertising the supported algorithms</name>
          <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
Want-Repr-Digest: sha-512=10, sha-256=0

{
  "type": "https://iana.org/assignments/http-problem-types#\
    digest-unsupported-algorithm",
  "title": "Unsupported hashing algorithm",
  "unsupported-algorithm": "sha-256",
  "header": "Repr-Digest"
}
]]></sourcecode>
        </figure>
        <t>This problem type can also be used when a request contains an integrity preference field with an unsupported algorithm. For example:</t>
        <figure>
          <name>A request with a sha-256 integrity preference field, which is not supported by the server</name>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: foo.example
Want-Repr-Digest: sha=10

]]></sourcecode>
        </figure>
        <figure>
          <name>Response indicating the problem and advertising the supported algorithms</name>
          <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{
  "type": "https://iana.org/assignments/http-problem-types#\
    digest-unsupported-algorithm",
  "title": "Unsupported hashing algorithm",
  "unsupported-algorithm": "sha",
  "header": "Want-Repr-Digest"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="invalid-digest-value">
        <name>Invalid Digest Value</name>
        <t>This section defines the "https://iana.org/assignments/http-problem-types#digest-invalid-value" problem type. A server <bcp14>MAY</bcp14> use this problem type when responding to a request, whose integrity fields include a digest value, that cannot be generated by the corresponding hashing algorithm. For example, if the digest value of the <tt>sha-512</tt> hashing algorithm is not 64 bytes long, it cannot be a valid SHA-512 digest value and the server can skip computing the digest value. This problem type <bcp14>MUST NOT</bcp14> be used if the server is not able to parse the integrity fields according to <xref section="4.5" sectionFormat="of" target="STRUCTURED-FIELDS"/>, for example because of a syntax error in the field value.</t>
        <t>One problem type extension member is defined, which <bcp14>SHOULD</bcp14> be populated for all responses using this problem type:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>header</tt> extension member as defined in <xref target="identifying-problem-causing-headers"/>.</t>
          </li>
        </ul>
        <t>The server <bcp14>SHOULD</bcp14> include a human-readable description why the value is considered invalid in the <tt>title</tt> member.</t>
        <t>This problem type indicates a fault in the sender's calculation or encoding of the digest value. A retry of the same request without modification will likely not yield a successful response.</t>
        <t>The following example shows a request with the content <tt>{"hello": "world"}</tt> (plus LF), but the digest has been truncated. The subsequent response indicates the invalid SHA-512 digest.</t>
        <figure>
          <name>A request with a sha-512 integrity field, whose digest has been truncated to 32 bytes</name>
          <sourcecode type="http-message"><![CDATA[
PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Repr-Digest: sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4:

{"hello": "world"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response indicating that the provided digest is too short</name>
          <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{
  "type": "https://iana.org/assignments/http-problem-types#\
    digest-invalid-value",
  "title": "digest value for sha-512 is not 64 bytes long",
  "header": "Repr-Digest"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="mismatching-digest-value">
        <name>Mismatching Digest Value</name>
        <t>This section defines the "https://iana.org/assignments/http-problem-types#digest-mismatching-value" problem type. A server <bcp14>MAY</bcp14> use this problem type when responding to a request, whose integrity fields include a digest value that does not match the digest value that the server calculated for the request content or representation.</t>
        <t>Three problem type extension members are defined, which <bcp14>SHOULD</bcp14> be populated for all responses using this problem type:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>algorithm</tt> extension member is the algorithm key of the used hashing algorithm.</t>
          </li>
          <li>
            <t>The <tt>provided-digest</tt> extension member is the digest value taken from the request's integrity fields. The digest value is serialized as a byte sequence as described in <xref section="4.1.8" sectionFormat="of" target="STRUCTURED-FIELDS"/>.</t>
          </li>
          <li>
            <t>The <tt>header</tt> extension member as defined in <xref target="identifying-problem-causing-headers"/>.</t>
          </li>
        </ul>
        <t>The problem type intentionally does not include the digest value calculated by the server to avoid attackers abusing this information for oracle attacks.</t>
        <t>If the sender receives this problem type, the request might be modified unintentionally by an intermediary. The sender could use this information to retry the request without modification to address temporary transmission issues.</t>
        <t>The following example shows a request with the content <tt>{"hello": "woXYZ"}</tt> (plus LF), but the representation digest for <tt>{"hello": "world"}</tt> (plus LF). The subsequent response indicates the mismatching SHA-256 digest values.</t>
        <figure>
          <name>A request with a sha-256 integrity field, which does not belong to the representation</name>
          <sourcecode type="http-message"><![CDATA[
PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Repr-Digest: sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:

{"hello": "woXYZ"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response indicating the mismatching digests</name>
          <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{
  "type": "https://iana.org/assignments/http-problem-types#\
    digest-mismatching-value",
  "title": "digest value from request does not match expected value",
  "algorithm": "sha-256",
  "provided-digest": ":RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:",
  "header": "Repr-Digest"
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="identifying-problem-causing-headers">
      <name>Identifying Problem Causing Headers</name>
      <t>Requests can include multiple integrity or integrity preference fields. For example, they may use the <tt>Content-Digest</tt> and <tt>Repr-Digest</tt> fields simultaneously or express preferences for content and representation digests at the same time. To aid troubleshooting, it's useful to identify the header field, whose value caused the problem detailed in the response. For this reason, the <tt>header</tt> extension member is defined, which <bcp14>SHOULD</bcp14> be populated for all responses using the problem types defined in this document.</t>
      <t>The <tt>header</tt> extension member's value is the header field name that caused the problem. Since HTTP header field names are case-insensitive and not all HTTP versions preserve their casing, the casing of extension member's value might not match the request header field name's casing.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Disclosing error details could leak information
such as the presence of intermediaries or the server's implementation details.
Moreover, they can be used to fingerprint the server.</t>
      <t>To mitigate these risks, a server could assess the risk of disclosing error details
and prefer a general problem type over a more specific one.</t>
      <t>When a server informs the client about mismatching digest values, it should not expose
the calculated digest to avoid exposing information that can be abused for oracle attacks.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is asked to register the following entries in the "HTTP Problem Types" registry at <eref target="https://www.iana.org/assignments/http-problem-types">https://www.iana.org/assignments/http-problem-types</eref>.</t>
      <section anchor="registration-of-digest-unsupported-algorithm-problem-type">
        <name>Registration of "digest-unsupported-algorithm" Problem Type</name>
        <dl>
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#digest-unsupported-algorithm</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Unsupported Hashing Algorithm</t>
          </dd>
          <dt>Recommended HTTP status code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="unsupported-hashing-algorithm"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="registration-of-digest-invalid-value-problem-type">
        <name>Registration of "digest-invalid-value" Problem Type</name>
        <dl>
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#digest-invalid-value</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Invalid Digest Value</t>
          </dd>
          <dt>Recommended HTTP status code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="invalid-digest-value"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="registration-of-digest-mismatching-value-problem-type">
        <name>Registration of "digest-mismatching-value" Problem Type</name>
        <dl>
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#digest-mismatching-value</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Mismatching Digest Value</t>
          </dd>
          <dt>Recommended HTTP status code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="mismatching-digest-value"/> of this document</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="DIGEST">
        <front>
          <title>Digest Fields</title>
          <author fullname="R. Polli" initials="R." surname="Polli"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="February" year="2024"/>
          <abstract>
            <t>This document defines HTTP fields that support integrity digests. The Content-Digest field can be used for the integrity of HTTP message content. The Repr-Digest field can be used for the integrity of HTTP representations. Want-Content-Digest and Want-Repr-Digest can be used to indicate a sender's interest and preferences for receiving the respective Integrity fields.</t>
            <t>This document obsoletes RFC 3230 and the Digest and Want-Digest HTTP fields.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9530"/>
        <seriesInfo name="DOI" value="10.17487/RFC9530"/>
      </reference>
      <reference anchor="PROBLEM">
        <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="STRUCTURED-FIELDS">
        <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="HTTP">
        <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="RFC8792">
        <front>
          <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
          <author fullname="K. Watsen" initials="K." surname="Watsen"/>
          <author fullname="E. Auerswald" initials="E." surname="Auerswald"/>
          <author fullname="A. Farrel" initials="A." surname="Farrel"/>
          <author fullname="Q. Wu" initials="Q." surname="Wu"/>
          <date month="June" year="2020"/>
          <abstract>
            <t>This document defines two strategies for handling long lines in width-bounded text content. One strategy, called the "single backslash" strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line. The second strategy, called the "double backslash" strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy. Both strategies use a self-describing header enabling automated reconstitution of the original content.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8792"/>
        <seriesInfo name="DOI" value="10.17487/RFC8792"/>
      </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>
  </back>
  <!-- ##markdown-source:
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
b5WPwO29/wLniWZ3wTMAAA==

-->

</rfc>
