<?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-jurkovikj-http-semantic-validator-01" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="HTTP Semantic Validators">Semantic Validators for HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-jurkovikj-http-semantic-validator-01"/>
    <author initials="A." surname="Jurkovikj" fullname="Antun Jurkovikj">
      <organization/>
      <address>
        <email>antunjurkovic@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="27"/>
    <area>Web and Internet Transport</area>
    <keyword>HTTP, validator, concurrency, semantic state</keyword>
    <abstract>
      <?line 18?>

<t>This document defines the <tt>Semantic-ETag</tt> HTTP response field and the
<tt>If-Semantic-Match</tt> HTTP request field. Unlike the standard <tt>ETag</tt> field,
which identifies a selected representation, <tt>Semantic-ETag</tt> identifies a
server-defined semantic state within an explicitly scoped semantic equivalence
domain. <tt>If-Semantic-Match</tt> enables origin servers to perform
representation-independent optimistic concurrency control when different HTTP
resources or representations expose the same logical state.</t>
      <t>This document does not update or replace the semantics of <tt>ETag</tt>, <tt>If-Match</tt>,
or HTTP cache validation defined by RFC 9110.</t>
    </abstract>
  </front>
  <middle>
    <?line 31?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP entity tags identify selected representations and support cache
revalidation and conditional requests <xref target="RFC9110"/>. Applications often expose a
single logical object through several representations or resources, such as an
HTML page, a JSON API resource, and a Markdown editing resource. The ordinary
ETags of those representations can differ even when they were generated from
the same application state.</t>
      <t>A client can therefore read one representation and later modify another
without a standard way to state, "perform this action only if the shared
logical state is still the state I observed." Reusing an ETag obtained from a
different target resource as <tt>If-Match</tt> does not solve this problem because
<tt>If-Match</tt> is evaluated against the selected representation of the request
target.</t>
      <t>This document defines a separate semantic validator and a corresponding
positive precondition. The extension preserves the existing meanings of
ordinary representation validators:</t>
      <ul spacing="normal">
        <li>
          <t><tt>ETag</tt> and <tt>If-Match</tt> remain scoped to the selected representation of the
target resource.</t>
        </li>
        <li>
          <t><tt>Semantic-ETag</tt> and <tt>If-Semantic-Match</tt> operate within a server-defined
semantic equivalence domain.</t>
        </li>
        <li>
          <t><tt>Semantic-ETag</tt> is not an HTTP cache validator and does not cause a <tt>304 Not
Modified</tt> response.</t>
        </li>
      </ul>
      <section anchor="scope">
        <name>Scope</name>
        <t>This document specifies field syntax, comparison, precondition evaluation,
atomicity, cache interaction, and security requirements. It does not define:</t>
        <ul spacing="normal">
          <li>
            <t>a universal model of application state;</t>
          </li>
          <li>
            <t>automatic equivalence between arbitrary URIs or origins;</t>
          </li>
          <li>
            <t>a discovery mechanism for semantic-precondition support;</t>
          </li>
          <li>
            <t>an editing format, merge algorithm, or conflict-resolution policy; or</t>
          </li>
          <li>
            <t>an integrity or authorization mechanism.</t>
          </li>
        </ul>
        <t>An application profile can define the relevant semantic equivalence domain,
discovery mechanism, and methods for which semantic preconditions are
required. The Agentic State Transfer profile
<xref target="I-D.jurkovikj-httpapi-agentic-state"/> is one such profile.</t>
      </section>
      <section anchor="relationship-to-tct-and-ast">
        <name>Relationship to TCT and AST</name>
        <t>The Collaboration Content Transfer protocol
<xref target="I-D.jurkovikj-collab-tunnel"/> defines machine-oriented representations and
discovery. A TCT representation can carry <tt>Semantic-ETag</tt>, but its ordinary
ETag continues to identify the exact TCT representation.</t>
        <t>Agentic State Transfer (AST) defines safe mutation workflows. AST Core uses
ordinary <tt>ETag</tt> and <tt>If-Match</tt> when the mutation targets the State-Bearing
Resource itself. AST Semantic uses the fields defined here when a mutation
targets a different resource or representation in the same semantic
equivalence domain.</t>
      </section>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</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>This document uses the Augmented Backus-Naur Form (ABNF) notation of <xref target="RFC5234"/>
and the list extension defined in Section 5.6.1 of <xref target="RFC9110"/>. It imports the
<tt>opaque-tag</tt> rule from Section 8.8.3 of <xref target="RFC9110"/>.</t>
      <dl>
        <dt><strong>Semantic state</strong></dt>
        <dd>
          <t>The application-defined logical state relevant to semantic equivalence and
mutation safety. It excludes representation-only artifacts but includes all
state whose change could make an action constructed against an earlier state
unsafe.</t>
        </dd>
        <dt><strong>Semantic equivalence domain</strong></dt>
        <dd>
          <t>The scope within which a server assigns meaning to a semantic validator. A
domain can be limited by resource identity, tenant, authorization context,
language, workflow, or another application-defined boundary.</t>
        </dd>
        <dt><strong>Semantic validator</strong></dt>
        <dd>
          <t>The opaque value carried by <tt>Semantic-ETag</tt> that identifies a current
semantic state within one semantic equivalence domain.</t>
        </dd>
        <dt><strong>State-changing request</strong></dt>
        <dd>
          <t>A request whose successful processing can alter semantic state. Whether a
method is state-changing can depend on application semantics in addition to
the method name.</t>
        </dd>
      </dl>
    </section>
    <section anchor="the-semantic-etag-response-field">
      <name>The Semantic-ETag Response Field</name>
      <t>The <tt>Semantic-ETag</tt> response field communicates the current semantic validator
associated with the target resource in the applicable semantic equivalence
domain.</t>
      <sourcecode type="abnf"><![CDATA[
Semantic-ETag = opaque-tag
]]></sourcecode>
      <t>The weak prefix (<tt>W/</tt>) is not part of <tt>opaque-tag</tt> and <bcp14>MUST NOT</bcp14> be used. A
sender <bcp14>MUST</bcp14> generate no more than one <tt>Semantic-ETag</tt> field value in a
response. A recipient that receives multiple or syntactically invalid values
<bcp14>MUST NOT</bcp14> choose one arbitrarily and <bcp14>MUST</bcp14> treat the field as unusable.</t>
      <t><tt>Semantic-ETag</tt> is response metadata about semantic state. It is independent
of the selected representation's <tt>ETag</tt>. A response can contain both fields:</t>
      <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: text/html
ETag: "html-v17"
Semantic-ETag: "article-state-v42"
]]></sourcecode>
      <t>The ordinary ETag identifies the selected HTML representation. The semantic
validator identifies the application state within the origin-defined
equivalence domain.</t>
      <t>An origin server <bcp14>MAY</bcp14> include <tt>Semantic-ETag</tt> in a successful response without
supporting <tt>If-Semantic-Match</tt>. Consequently, the presence of
<tt>Semantic-ETag</tt> alone is not a capability advertisement for semantic
precondition enforcement.</t>
      <t>Intermediaries <bcp14>MUST NOT</bcp14> generate, rewrite, or remove <tt>Semantic-ETag</tt> unless
they act with explicit origin authority as part of the semantic validation
system. An intermediary that forwards the field <bcp14>SHOULD</bcp14> forward it unchanged.</t>
      <section anchor="generation-and-equivalence-requirements">
        <name>Generation and Equivalence Requirements</name>
        <t>Within one semantic equivalence domain, an origin server <bcp14>MUST</bcp14> satisfy all of
the following invariants:</t>
        <ol spacing="normal" type="1"><li>
            <t>Equal current <tt>Semantic-ETag</tt> values imply semantically equivalent state.</t>
          </li>
          <li>
            <t>Every change to state relevant to mutation safety changes the semantic
validator before or atomically with publication of the changed state.</t>
          </li>
          <li>
            <t>A validator is not reused across authorization contexts, tenants, or other
boundaries that do not expose the same mutation-relevant state.</t>
          </li>
          <li>
            <t>Validators are opaque to clients and are compared only as specified in this
document.</t>
          </li>
        </ol>
        <t>This specification does not require the converse of the first invariant.
Semantically equivalent states <bcp14>MAY</bcp14> receive different validators at different
times. This permits monotonic revision identifiers, version vectors, changes
to a validator-construction regime, and protection against an ABA transition.</t>
        <t>A server <bcp14>MAY</bcp14> derive a validator from a collision-resistant hash, an HMAC, a
revision identifier, a version vector, or another server-controlled mechanism.
If historical transitions matter to mutation safety, the semantic state or
validator construction <bcp14>SHOULD</bcp14> include a revision component rather than
reissuing an earlier validator after the state returns to an equal value.</t>
        <t>When JSON is used internally to derive a validator, JSON Canonicalization
Scheme (JCS) <xref target="RFC8785"/> can provide a deterministic input. JCS is not required
when the validator is derived from a revision identifier or another mechanism
that already satisfies the invariants above.</t>
      </section>
      <section anchor="comparison">
        <name>Comparison</name>
        <t>Two semantic validators match only when their <tt>opaque-tag</tt> values are
identical, using a case-sensitive, character-for-character comparison. No
Unicode normalization, case folding, weak comparison, or interpretation of an
embedded hash or version is performed.</t>
        <t>Validators obtained from different semantic equivalence domains are not
comparable unless an applicable protocol profile explicitly binds those
domains together. Equality of opaque strings observed on unrelated resources
or origins does not establish semantic equivalence.</t>
      </section>
    </section>
    <section anchor="the-if-semantic-match-request-field">
      <name>The If-Semantic-Match Request Field</name>
      <t>The <tt>If-Semantic-Match</tt> request field makes a request conditional on the
origin server's current semantic validator.</t>
      <sourcecode type="abnf"><![CDATA[
If-Semantic-Match = "*" / 1#opaque-tag
]]></sourcecode>
      <t>For a list of validators, the condition is true when the current
<tt>Semantic-ETag</tt> matches at least one supplied validator. The condition is
false when no supplied validator matches or when the target has no current
semantic state in the applicable domain.</t>
      <t>For the wildcard value (<tt>*</tt>), the condition is true when the target has a
current semantic state in the applicable domain and false otherwise. An
application profile <bcp14>MAY</bcp14> prohibit wildcard-only conditions when proof of an
observed version is required.</t>
      <t>When the condition is false, an origin server that supports this field for the
target resource <bcp14>MUST NOT</bcp14> perform the requested method and <bcp14>MUST</bcp14> respond with
<tt>412 Precondition Failed</tt>.</t>
      <sourcecode type="http"><![CDATA[
PATCH /article/123 HTTP/1.1
Host: example.com
Content-Type: application/merge-patch+json
If-Semantic-Match: "article-state-v42"

{"title":"Updated title"}
]]></sourcecode>
      <section anchor="capability-requirement">
        <name>Capability Requirement</name>
        <t>An unknown request field can be ignored by an HTTP implementation. A client
therefore <bcp14>MUST NOT</bcp14> rely on <tt>If-Semantic-Match</tt> for mutation safety unless it
has positive knowledge, specific to the target resource and request method,
that the target enforces the field. Such knowledge can be provided by an
application profile, resource-and-method-specific documentation, or another
explicit discovery mechanism.</t>
        <t>The presence of <tt>Semantic-ETag</tt> alone is insufficient because a deployment can
provide the response field for observation without implementing the request
field.</t>
        <t>A server that advertises enforcement for a target resource and request method
<bcp14>MUST NOT</bcp14> silently ignore a syntactically valid <tt>If-Semantic-Match</tt> field on
that method. If the field is malformed, the server <bcp14>MUST</bcp14> reject the request
with <tt>400 Bad Request</tt>. If it is valid but cannot be satisfied or evaluated
for the applicable domain, the server <bcp14>MUST</bcp14> fail closed with <tt>412 Precondition
Failed</tt>.</t>
      </section>
      <section anchor="evaluation-with-standard-preconditions">
        <name>Evaluation with Standard Preconditions</name>
        <t>Standard HTTP preconditions retain their meanings and ordering under
<xref target="RFC9110"/>. After authentication, authorization, request validation, and other
normal checks that precede precondition evaluation, an origin server <bcp14>MUST</bcp14>:</t>
        <ol spacing="normal" type="1"><li>
            <t>evaluate applicable standard HTTP preconditions according to <xref target="RFC9110"/>;</t>
          </li>
          <li>
            <t>if no standard precondition has already determined the response, evaluate
<tt>If-Semantic-Match</tt>; and</t>
          </li>
          <li>
            <t>perform the requested action only if every applicable precondition is true.</t>
          </li>
        </ol>
        <t>A request can contain both <tt>If-Match</tt> and <tt>If-Semantic-Match</tt>. In that case,
<tt>If-Match</tt> constrains the selected representation of the target resource and
<tt>If-Semantic-Match</tt> constrains the semantic equivalence domain. Both
conditions must be true.</t>
      </section>
      <section anchor="atomic-compare-and-commit">
        <name>Atomic Compare-and-Commit</name>
        <t>For a state-changing request, evaluation of <tt>If-Semantic-Match</tt>, application
of the state transition, and publication of the resulting semantic validator
<bcp14>MUST</bcp14> occur atomically with respect to every operation capable of changing the
same semantic equivalence domain.</t>
        <t>This requirement applies to all writers, including HTTP handlers, background
jobs, administrative interfaces, migrations, event consumers, and other
services. Merely storing the new state and validator in one transaction is
not sufficient if two requests can both compare against the same old validator
before either transition commits.</t>
      </section>
      <section anchor="deferred-processing">
        <name>Deferred Processing</name>
        <t>When a server accepts a request for deferred execution, it <bcp14>MUST</bcp14> preserve the
precondition through commit. It <bcp14>MUST</bcp14> do at least one of the following:</t>
        <ul spacing="normal">
          <li>
            <t>commit the semantic state transition before returning <tt>202 Accepted</tt>, while
deferring only external side effects;</t>
          </li>
          <li>
            <t>reserve or fence the matched semantic version until commit; or</t>
          </li>
          <li>
            <t>re-evaluate the expected semantic validator atomically when the deferred
transition commits.</t>
          </li>
        </ul>
        <t>If a commit-time comparison fails, the semantic state <bcp14>MUST NOT</bcp14> be modified by
that operation. Because the original HTTP exchange has completed, the status
resource or equivalent completion channel <bcp14>MUST</bcp14> report a failed-precondition
outcome.</t>
      </section>
      <section anchor="successful-and-failed-responses">
        <name>Successful and Failed Responses</name>
        <t>After a successful state-changing request that leaves a current semantic
state, the origin server <bcp14>SHOULD</bcp14> include the resulting <tt>Semantic-ETag</tt> when the
requesting principal is authorized to observe it:</t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 204 No Content
Semantic-ETag: "article-state-v43"
]]></sourcecode>
        <t>A <tt>412 Precondition Failed</tt> response <bcp14>SHOULD</bcp14> include the current
<tt>Semantic-ETag</tt> only after authentication and authorization checks and only
when disclosure is appropriate. A returned validator is advisory and can
become stale immediately.</t>
        <t>A client receiving <tt>412</tt> <bcp14>MUST NOT</bcp14> retry solely by replacing its supplied
validator with the value returned in the error response. It <bcp14>MUST</bcp14> first obtain
or otherwise validate the current state and reconcile its intended action,
unless an application specification explicitly guarantees that such a retry
is safe.</t>
      </section>
    </section>
    <section anchor="interaction-with-http-caching-and-representations">
      <name>Interaction with HTTP Caching and Representations</name>
      <t><tt>Semantic-ETag</tt> is not an HTTP cache validator, does not define a cache key,
and does not replace <tt>ETag</tt>. A cache <bcp14>MUST NOT</bcp14> use it to validate a stored
response unless another specification explicitly defines complete cache
semantics for that use.</t>
      <t>This specification deliberately does not define <tt>If-Semantic-None-Match</tt> and
does not permit an origin to return <tt>304 Not Modified</tt> solely because semantic
state is unchanged. A <tt>304</tt> response authorizes reuse of a stored selected
representation; semantic equivalence does not imply byte-for-byte equality of
that representation.</t>
      <t>Ordinary representation selection and caching continue to use <tt>Vary</tt>,
<tt>ETag</tt>, <tt>If-None-Match</tt>, and the rules of <xref target="RFC9110"/> and <xref target="RFC9111"/>. For example,
HTML and JSON representations can share a semantic validator while retaining
different ordinary ETags:</t>
      <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: text/html
ETag: "html-en-v17"
Semantic-ETag: "article-state-v42"
Vary: Accept, Accept-Language
]]></sourcecode>
      <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
ETag: "json-en-v9"
Semantic-ETag: "article-state-v42"
Vary: Accept, Accept-Language
]]></sourcecode>
      <t>Content codings and other representation transformations affect ordinary
strong ETags according to HTTP semantics. They do not require a different
<tt>Semantic-ETag</tt> when the coded variants remain in the same semantic
equivalence domain.</t>
      <t><tt>Semantic-ETag</tt> <bcp14>MUST NOT</bcp14> be used to evaluate <tt>If-Range</tt>; semantic equivalence
does not establish byte-range compatibility.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="enforcement-downgrade">
        <name>Enforcement Downgrade</name>
        <t>The principal protocol risk is relying on a request field that an unaware
server ignores. Clients <bcp14>MUST</bcp14> obtain positive knowledge of enforcement before
using <tt>If-Semantic-Match</tt> as a safety condition. Servers and profiles <bcp14>SHOULD</bcp14>
make that knowledge specific to the resource and method rather than to an
entire origin.</t>
      </section>
      <section anchor="equivalence-domain-confusion">
        <name>Equivalence-Domain Confusion</name>
        <t>Overbroad domains can authorize an action against state different from the
state the client observed. Servers <bcp14>MUST</bcp14> include every mutation-relevant,
authorization-relevant, and integrity-relevant value in the domain or split the
domain. A semantic validator from one origin, tenant, language, or principal
<bcp14>MUST NOT</bcp14> be applied to another unless a profile explicitly establishes the
shared domain and trust relationship.</t>
      </section>
      <section anchor="atomicity-and-competing-writers">
        <name>Atomicity and Competing Writers</name>
        <t>A non-atomic comparison permits multiple requests to pass against the same old
state and reintroduces lost updates. All write paths to the domain must
participate in the same serialization or compare-and-swap mechanism.</t>
      </section>
      <section anchor="disclosure-correlation-and-tracking">
        <name>Disclosure, Correlation, and Tracking</name>
        <t>Semantic validators can reveal update frequency, correlate representations or
authorization views, and expose internal revision information. Servers <bcp14>SHOULD</bcp14>
use separate domains and privacy-preserving validator construction when such
correlation is sensitive. Validators <bcp14>MUST NOT</bcp14> be treated as authentication,
authorization, confidentiality, or content-integrity mechanisms.</t>
      </section>
      <section anchor="guessing-and-collision-resistance">
        <name>Guessing and Collision Resistance</name>
        <t>Content-derived validators for low-entropy state can enable offline guessing.
Servers can mitigate this with an HMAC, secret salt, opaque revision identifier,
or another construction appropriate to their threat model. A construction
that permits two mutation-relevant states to share a validator can cause an
unsafe match; servers therefore need collision resistance appropriate to the
domain and deployment lifetime.</t>
      </section>
      <section anchor="conflict-information">
        <name>Conflict Information</name>
        <t>A current validator or state returned with <tt>412</tt> can disclose information to
an unauthorized requester. Authentication and authorization checks <bcp14>MUST</bcp14>
precede such disclosure. Clients must treat returned conflict information as
untrusted and potentially stale.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to register the following field names in the "Hypertext
Transfer Protocol (HTTP) Field Name Registry".</t>
      <section anchor="semantic-etag">
        <name>Semantic-ETag</name>
        <ul spacing="normal">
          <li>
            <t>Field Name: Semantic-ETag</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Structured Type: not applicable</t>
          </li>
          <li>
            <t>Reference: this document</t>
          </li>
          <li>
            <t>Comments: single <tt>opaque-tag</tt> response field; weak entity-tag syntax is not
permitted.</t>
          </li>
        </ul>
      </section>
      <section anchor="if-semantic-match">
        <name>If-Semantic-Match</name>
        <ul spacing="normal">
          <li>
            <t>Field Name: If-Semantic-Match</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Structured Type: not applicable</t>
          </li>
          <li>
            <t>Reference: this document</t>
          </li>
          <li>
            <t>Comments: conditional request field using <tt>"*" / 1#opaque-tag</tt>; clients
require positive knowledge of enforcement before relying on it for safety.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="changes-since-00">
      <name>Changes Since <tt>-00</tt></name>
      <t>This revision:</t>
      <ul spacing="normal">
        <li>
          <t>removes <tt>If-Semantic-None-Match</tt> and semantic <tt>304</tt> behavior;</t>
        </li>
        <li>
          <t>defines exact comparison and one-way equivalence invariants;</t>
        </li>
        <li>
          <t>requires positive resource-and-method-specific capability knowledge before a
client relies on enforcement;</t>
        </li>
        <li>
          <t>requires atomic compare, transition, and validator publication;</t>
        </li>
        <li>
          <t>defines deferred-processing requirements;</t>
        </li>
        <li>
          <t>prohibits blind retry based only on a validator returned with <tt>412</tt>;</t>
        </li>
        <li>
          <t>clarifies that <tt>Semantic-ETag</tt> is response metadata rather than an HTTP cache
validator; and</t>
        </li>
        <li>
          <t>aligns the extension with AST Core, AST Semantic, and TCT layering.</t>
        </li>
      </ul>
    </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="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>
        <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="RFC9111">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.jurkovikj-httpapi-agentic-state">
          <front>
            <title>HTTP Profile for Synchronized Resource State (Agentic State Transfer)</title>
            <author fullname="Antun Jurkovikj" initials="A." surname="Jurkovikj">
         </author>
            <date day="16" month="May" year="2026"/>
            <abstract>
              <t>   HTTP resources are frequently exposed in multiple representations
   (e.g., text/html for rendering and application/json for
   processing) via Content Negotiation. Standard HTTP validators such
   as ETags identify selected representations, while many
   applications need concurrency control over a shared logical
   resource state. This creates a synchronization gap where a client
   modifying one representation cannot guarantee consistency with the
   underlying state of another representation, leading to race
   conditions and "lost updates" in multi-client environments.

   This document specifies Agentic State Transfer (AST), an HTTP
   profile for managing Canonical Resource State (CRS) across
   multiple synchronized representations of the same resource. It
   defines a State-Bearing Representation (SBR) whose strong ETag
   acts as the AST semantic validator for the CRS. It further
   mandates the use of Optimistic Concurrency Control via If-Match
   headers for state-changing operations, ensuring that mutations
   applied by agents (whether automated clients, scripts, or human-
   driven applications) are atomic and consistent across all views.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jurkovikj-httpapi-agentic-state-01"/>
        </reference>
        <reference anchor="I-D.jurkovikj-collab-tunnel">
          <front>
            <title>The Collaboration Content Transfer (TCT) Protocol</title>
            <author fullname="Antun Jurkovikj" initials="A." surname="Jurkovikj">
         </author>
            <date day="12" month="May" year="2026"/>
            <abstract>
              <t>   This document specifies the Collaboration Content Transfer (TCT)
   Protocol, an HTTP-based method for efficient, verifiable delivery of
   web content to automated agents.  TCT defines a JSON envelope that
   encapsulates resource content in negotiated text-based formats (such
   as Markdown or plain text) together with canonical metadata.  It uses
   bidirectional URL discovery between human-facing and machine-facing
   URLs, JSON sitemaps, strong ETag validators, and conditional requests
   to reduce bandwidth while preserving semantic structure and canonical
   identity.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jurkovikj-collab-tunnel-02"/>
        </reference>
        <reference anchor="RFC8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
      </references>
    </references>
    <?line 463?>

<section anchor="appendix-a-complete-example">
      <name>Appendix A. Complete Example</name>
      <t>A representation-oriented read can expose both validators:</t>
      <sourcecode type="http"><![CDATA[
GET /article/123 HTTP/1.1
Host: example.com
Accept: text/html

HTTP/1.1 200 OK
Content-Type: text/html
ETag: "html-v17"
Semantic-ETag: "article-state-v42"
]]></sourcecode>
      <t>After obtaining positive knowledge that the target enforces semantic
preconditions, the client can submit:</t>
      <sourcecode type="http"><![CDATA[
PATCH /article/123 HTTP/1.1
Host: example.com
Content-Type: application/merge-patch+json
If-Semantic-Match: "article-state-v42"

{"status":"draft"}
]]></sourcecode>
      <t>A successful transition can return:</t>
      <sourcecode type="http"><![CDATA[
HTTP/1.1 204 No Content
Semantic-ETag: "article-state-v43"
]]></sourcecode>
      <t>A conflict can return:</t>
      <sourcecode type="http"><![CDATA[
HTTP/1.1 412 Precondition Failed
Content-Type: application/problem+json
Semantic-ETag: "article-state-v44"

{
  "type": "https://example.com/problems/semantic-precondition-failed",
  "title": "Semantic precondition failed",
  "status": 412,
  "detail": "The resource state changed after the client constructed its update."
}
]]></sourcecode>
      <t>The client retrieves or otherwise validates the current state, reconciles the
intended change, and only then sends a new request.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
