<?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.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-murray-dispatch-mime-protobuf-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title>Media Type Registration for Protocol Buffers</title>
    <seriesInfo name="Internet-Draft" value="draft-murray-dispatch-mime-protobuf-01"/>
    <author initials="M." surname="Kucherawy" fullname="Murray S. Kucherawy" role="editor">
      <organization/>
      <address>
        <email>superuser@gmail.com</email>
      </address>
    </author>
    <author initials="W." surname="Kumari" fullname="Warren Kumari">
      <organization>Google</organization>
      <address>
        <email>warren@kumari.net</email>
      </address>
    </author>
    <author initials="R." surname="Sloan" fullname="Rob Sloan">
      <organization>Google</organization>
      <address>
        <email>rmsj@google.com</email>
      </address>
    </author>
    <date year="2025" month="May" day="28"/>
    <area>ART</area>
    <workgroup>DISPATCH</workgroup>
    <keyword>MIME</keyword>
    <keyword>protobuf</keyword>
    <keyword>media type</keyword>
    <keyword>application</keyword>
    <abstract>
      <?line 114?>

<t>This document registers media types for Protocol Buffers, a common extensible mechanism for serializing structured data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://github.com/wkumari/draft-murray-dispatch-mime-protobuf"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-murray-dispatch-mime-protobuf/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        DISPATCH Working Group mailing list (<eref target="mailto:dispatch@ietf.org"/>),
        which is archived at <eref target="https://www.ietf.org/mailman/listinfo/dispatch"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dispatch/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com//wkumari/draft-murray-dispatch-mime-protobuf"/>.</t>
    </note>
  </front>
  <middle>
    <?line 118?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Protocol Buffers ("protobufs") were introduced in 2008 as a free, open source, platform-independent mechanism for transport and storage of structured data: their use has become
increasingly common and Protobuf implementations exist in many languages (C++, C#, Dart, Go, Java, Kotlin, Objective-C, Python, JavaScript, Ruby, Swift, and perhaps others). See <xref target="Protobuf"/> for more information.</t>
      <t>Protobuf consists of an interface definition language ("IDL"), wire encoding formats, and language-specific implementations (typically involving a generated API) so that clients and servers can be easily deployed using a common schema. Protobuf supports multiple wire formats for interchange: <xref target="Binary"/>, which is optimized for wire efficiency, and <xref target="ProtoJSON"/>, which maps the Protobuf schema onto a JSON structure.</t>
      <t>Serialized objects are occasionally transported within media that make use of media types (see <xref target="RFC2045"/> et seq) to identify payloads. Accordingly,
current and historical media types used for this purpose would benefit from registration. This document requests those registrations of IANA.</t>
    </section>
    <section anchor="description">
      <name>Payload Description</name>
      <t>These media types are used in the transport of serialized objects only.  The IDL and object definitions, if transported, would be used with any appropriate text media type.
In the three figures below, only the third of these would ever be used with these media types (a JSON example is depicted).</t>
      <t>An example use of the IDL to specify a "Person" object:</t>
      <artwork><![CDATA[
edition = "2023";

message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;
}
]]></artwork>
      <t>An example of python code that uses code generated from the IDL definition above to create an instance of a "Person" object:</t>
      <sourcecode type="python"><![CDATA[
person = Person()
person.id = 1234
person.name = "John Doe"
person.email = "jdoe@example.com"
]]></sourcecode>
      <t>An example of the above instance expressed in JSON:</t>
      <artwork><![CDATA[
{
  "name": "John Doe",
  "id": 1234,
  "email": "jdoe@example.com"
}
]]></artwork>
    </section>
    <section anchor="encoding">
      <name>Encoding Considerations</name>
      <t>Protobuf supports only the <xref target="Binary"/> and <xref target="ProtoJSON"/> formats for interchange, both of which are platform-independent.
For binary forms that need to transit non-binary transports, a base64 <tt>Content-Transfer-Encoding</tt> (xref to <xref target="RFC4648"/>) is recommended.</t>
      <t>The media type includes an optional "encoding" parameter indicating which encoding format is to be used with that particular payload.  This is included for future extensibility. Valid values for this parameter are "binary" and "json", and other values MUST be treated as an error.  See <xref target="iana"/> for the defaults for each of the two registered media types.  Using "binary" for the JSON type or "json" for the binary type MUST be treated as an error.</t>
    </section>
    <section anchor="versions">
      <name>Versions</name>
      <t>Protobuf (without a number), later also referred to as protobuf1, was the original private version of protobuf.  Protobuf2 and protobuf3 came later, with the latter of these being current at the time of writing.</t>
      <t>The number associated with the name refers to evolutions of the schema of the IDL, not the wire format.  Accordingly, a serialized object generated by any of these is compatible with any other.  The media type registrations in <xref target="iana"/> include support for versioning of the wire format, should it ever change, but do not refer to the IDL, which can evolve independently.</t>
      <t>Clients MUST reject payloads with an unsupported version number.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>The payload for these media types contain no directly executable code. While it is common for a protobuf definition to be used as input to a code generator which then produces something executable, but that applies to the schema language, not serializations.</t>
      <t>Protobuf provides no security, privacy, integrity, or compression services: clients or servers for which this is a concern should avail themselves of solutions that provide such capabilities (e.g. <xref target="RFC8446"/>). Implementations should be careful when processing Protobuf like any binary format: a malformed request to a protobuf server could be crafted to, for example, allocate a very large amount of memory, potentially impacting other operations on that server.</t>
      <t>In order to safely use Protobuf serializations on the web, it is important to ensure that they are not interpreted as another document type, such as JavaScript: we recommend base64-encoding binary Protobuf responses whenever possible to prevent parsing as active content. Servers should generally follow the advice of <xref target="RFC9205"/> to prevent content sniffing for all binary formats.</t>
      <t>Further, when using JSON serializations it is important that it is clear to browsers that the content is pure JSON, so that they can inhibit Cross-Site Script Inclusion or side-channel attacks using techniques such as Cross-Origin Read Blocking (<xref target="CORB"/>). Per <xref target="RFC6839"/>, pure JSON content is indicated by a <tt>+json</tt> subtype suffix (see also <xref target="MIMESNIFF"/>); so when serializing Protobuf content to JSON, users MUST use the <tt>application/protobuf+json</tt> MIME type. When using JSON, <tt>charset</tt> can prevent certain encoding confusion attacks so users should specify it for all JSON encodings.</t>
      <t>In the <xref target="Any"/> type there is technically a link, which was intended to be dereferenced to obtain schemas for a given type; however this is not supported by widely used Protobuf implementations.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests the registration of <tt>application/protobuf</tt> and <tt>application/protobuf+json</tt> as media types for Protobuf, and the notation of <tt>application/x-protobuf</tt>, <tt>application/x-protobuffer</tt>, and <tt>application/x-protobuf+json</tt> as deprecated aliases:</t>
      <section anchor="registration-for-the-applicationprotobuf-media-type">
        <name>Registration for the "application/protobuf" Media Type</name>
        <t>Type name: application</t>
        <t>Subtype name: protobuf</t>
        <t>Required parameters: none</t>
        <t>Optional parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>encoding</tt>, which indicates the type of Protobuf encoding and is "binary" by default for <tt>application/protobuf</tt>, indicating the <xref target="Binary"/> format. At the time of writing, no other encoding can be used for <tt>application/protobuf</tt> so this parameter is for extensibility.</t>
          </li>
          <li>
            <t><tt>version</tt>, which indicates the version of the wire encoding specification (not the schema language), with default <tt>1</tt>. At the time of writing, no protobuf wire encodings are versioned so this parameter is for extensibility. Unversioned wire encodings should be treated as having version <tt>1</tt>. Protobuf implementations should accept all versions of wire encodings defined at the time of implementation.</t>
          </li>
        </ul>
        <t>Encoding considerations: binary</t>
        <t>Security considerations: see <xref target="security"/></t>
        <t>Interoperability considerations: The Protobuf specification includes versioning provisions to ensure backward compatibility when encountering payloads with unknown properties.</t>
        <t>Published specification: <xref target="Protobuf"/></t>
        <t>Applications that use this media type: Any application with a need to exchange or store structured objects across platforms or implementations.</t>
        <t>Fragment identifier considerations: None.</t>
        <t>Additional information:</t>
        <artwork><![CDATA[
 Deprecated alias names for this type: `application/x-protobuf`, `application/x-protobuffer`
 Magic number(s):
 File extension(s):
 Macintosh file type code(s):
]]></artwork>
        <t>Person &amp; email address to contact for further information: Protobuf &lt;protobuf-team@google.com&gt;</t>
        <t>Intended usage: COMMON</t>
        <t>Restrictions on usage: None</t>
        <t>Author: Rob Sloan &lt;rmsj@google.com&gt;</t>
        <t>Change controller: Protobuf &lt;protobuf-team@google.com&gt;</t>
        <t>Provisional registration? (standards tree only): No</t>
      </section>
      <section anchor="registration-for-applicationprotobufjson-media-type">
        <name>Registration for "application/protobuf+json" Media Type</name>
        <t>Type name: application</t>
        <t>Subtype name: protobuf+json</t>
        <t>Required parameters: <tt>charset</tt>, which MUST be set to <tt>utf-8</tt> (case-insensitive).</t>
        <t>Optional parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>encoding</tt>, which indicates the type of Protobuf encoding and is <tt>json</tt> by default for <tt>application/protobuf+json</tt>, indicating the <xref target="ProtoJSON"/> format. At the time of writing, no other encoding can be used for <tt>application/protobuf+json</tt> so this parameter is for extensibility.</t>
          </li>
          <li>
            <t><tt>version</tt>, which indicates the version of the wire encoding specification (not the schema language), with default <tt>1</tt>. At the time of writing, no protobuf wire encodings are versioned so this parameter is for extensibility. Unversioned wire encodings should be treated as having version <tt>1</tt>. Protobuf implementations should accept all versions of wire encodings defined at the time of implementation.</t>
          </li>
        </ul>
        <t>Encoding considerations: Same as encoding considerations of <tt>application/json</tt> as specified in <xref target="RFC7159"/>, Section 11.</t>
        <t>Security considerations: see <xref target="security"/></t>
        <t>Interoperability considerations: The Protobuf specification includes versioning provisions to ensure backward compatibility when encountering payloads with unknown properties.</t>
        <t>Published specification: <xref target="Protobuf"/></t>
        <t>Applications that use this media type: Any application with a need to exchange or store structured objects across platforms or implementations.</t>
        <t>Fragment identifier considerations: None.</t>
        <t>Additional information:</t>
        <artwork><![CDATA[
 Deprecated alias names for this type: x-protobuf+json
 Magic number(s):
 File extension(s):
 Macintosh file type code(s):
]]></artwork>
        <t>Person &amp; email address to contact for further information: Protobuf &lt;protobuf-team@google.com&gt;</t>
        <t>Intended usage: COMMON</t>
        <t>Restrictions on usage: None</t>
        <t>Author: Rob Sloan &lt;rmsj@google.com&gt;</t>
        <t>Change controller: Protobuf &lt;protobuf-team@google.com&gt;</t>
        <t>Provisional registration? (standards tree only): No</t>
      </section>
    </section>
    <section anchor="contact">
      <name>Contact</name>
      <t>Please contact protobuf-team@google.com for requests to adjust this specification. Issues may be raised at https://github.com/protocolbuffers/protobuf.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2045">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</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 initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2045"/>
          <seriesInfo name="DOI" value="10.17487/RFC2045"/>
        </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="RFC2077">
          <front>
            <title>The Model Primary Content Type for Multipurpose Internet Mail Extensions</title>
            <author fullname="S. Nelson" initials="S." surname="Nelson"/>
            <author fullname="C. Parks" initials="C." surname="Parks"/>
            <author>
              <organization>Mitra</organization>
            </author>
            <date month="January" year="1997"/>
            <abstract>
              <t>The purpose of this memo is to propose an update to Internet RFC 2045 to include a new primary content-type to be known as "model". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2077"/>
          <seriesInfo name="DOI" value="10.17487/RFC2077"/>
        </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="RFC6657">
          <front>
            <title>Update to MIME regarding "charset" Parameter Handling in Textual Media Types</title>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="July" year="2012"/>
            <abstract>
              <t>This document changes RFC 2046 rules regarding default "charset" parameter values for "text/*" media types to better align with common usage by existing clients and servers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6657"/>
          <seriesInfo name="DOI" value="10.17487/RFC6657"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC6839">
          <front>
            <title>Additional Media Type Structured Syntax Suffixes</title>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>A content media type name sometimes includes partitioned meta- information distinguished by a structured syntax to permit noting an attribute of the media as a suffix to the name. This document defines several structured syntax suffixes for use with media type registrations. In particular, it defines and registers the "+json", "+ber", "+der", "+fastinfoset", "+wbxml" and "+zip" structured syntax suffixes, and provides a media type structured syntax suffix registration form for the "+xml" structured syntax suffix. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6839"/>
          <seriesInfo name="DOI" value="10.17487/RFC6839"/>
        </reference>
        <reference anchor="RFC7303">
          <front>
            <title>XML Media Types</title>
            <author fullname="H. Thompson" initials="H." surname="Thompson"/>
            <author fullname="C. Lilley" initials="C." surname="Lilley"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This specification standardizes three media types -- application/xml, application/xml-external-parsed-entity, and application/xml-dtd -- for use in exchanging network entities that are related to the Extensible Markup Language (XML) while defining text/xml and text/ xml-external-parsed-entity as aliases for the respective application/ types. This specification also standardizes the '+xml' suffix for naming media types outside of these five types when those media types represent XML MIME entities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7303"/>
          <seriesInfo name="DOI" value="10.17487/RFC7303"/>
        </reference>
        <reference anchor="RFC8081">
          <front>
            <title>The "font" Top-Level Media Type</title>
            <author fullname="C. Lilley" initials="C." surname="Lilley"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This memo serves to register and document the "font" top-level media type, under which subtypes for representation formats for fonts may be registered. This document also serves as a registration application for a set of intended subtypes, which are representative of some existing subtypes already in use, and currently registered under the "application" tree by their separate registrations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8081"/>
          <seriesInfo name="DOI" value="10.17487/RFC8081"/>
        </reference>
        <reference anchor="RFC9694">
          <front>
            <title>Guidelines for the Definition of New Top-Level Media Types</title>
            <author fullname="M.J. Dürst" initials="M.J." surname="Dürst"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>This document defines best practices for defining new top-level media types. It also introduces a registry for top-level media types, and contains a short history of top-level media types. It updates RFC 6838.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="9694"/>
          <seriesInfo name="DOI" value="10.17487/RFC9694"/>
        </reference>
        <reference anchor="RFC9695">
          <front>
            <title>The 'haptics' Top-Level Media Type</title>
            <author fullname="Y. K. Muthusamy" initials="Y. K." surname="Muthusamy"/>
            <author fullname="C. Ullrich" initials="C." surname="Ullrich"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>This memo registers and documents the 'haptics' top-level media type, under which subtypes for representation formats for haptics may be registered. This document also serves as a registration for a set of subtypes, which are representative of some existing subtypes already in use.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9695"/>
          <seriesInfo name="DOI" value="10.17487/RFC9695"/>
        </reference>
        <reference anchor="RFC4289">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document specifies IANA registration procedures for MIME external body access types and content-transfer-encodings. 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="13"/>
          <seriesInfo name="RFC" value="4289"/>
          <seriesInfo name="DOI" value="10.17487/RFC4289"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC7159">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2014"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7159"/>
          <seriesInfo name="DOI" value="10.17487/RFC7159"/>
        </reference>
        <reference anchor="Protobuf" target="https://protobuf.dev/">
          <front>
            <title>Protocol Buffers</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9205">
          <front>
            <title>Building Protocols with HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
              <t>This document obsoletes RFC 3205.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="56"/>
          <seriesInfo name="RFC" value="9205"/>
          <seriesInfo name="DOI" value="10.17487/RFC9205"/>
        </reference>
        <reference anchor="CORB" target="https://www.chromium.org/Home/chromium-security/corb-for-developers">
          <front>
            <title>Cross-Origin Read Blocking for Web Developers</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MIMESNIFF" target="https://mimesniff.spec.whatwg.org/#mime-type-groups">
          <front>
            <title>MIME Sniffing: Living Standard</title>
            <author>
              <organization>WHATWG</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Any" target="https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/any.proto">
          <front>
            <title>any.proto Schema Definition</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Binary" target="https://protobuf.dev/programming-guides/encoding">
          <front>
            <title>Protobuf Binary Wire Encoding Spec</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ProtoJSON" target="https://protobuf.dev/programming-guides/json">
          <front>
            <title>Protobuf JSON Wire Encoding Spec</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Proto2" target="https://protobuf.dev/reference/protobuf/proto2-spec">
          <front>
            <title>Proto2 Schema Language Specification</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Proto3" target="https://protobuf.dev/reference/protobuf/proto3-spec">
          <front>
            <title>Proto3 Schema Language Specification</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Edition2023" target="https://protobuf.dev/reference/protobuf/edition-2023-spec">
          <front>
            <title>Proto Edition 2023 Schema Language Specification</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 289?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Orie Steele provided valuable feedback to this work.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1ba28bR5b93r+iQAELaUxSluQ4Dr3ZtSxbsRLLFkxlvB/m
g4rdRbLsZhdT1S2KIyi/fc+99eimHoZjTDDAIEEQm/2ouu9z7q3OYDDIal2X
aiR6p6rQUpyvl0p8UDPtaitrbSoxNVacWVOb3JTiZTOdKut6WS5rNTN2PRK6
mposK0xeyQXWKayc1oNFY61cDwrtlrLO54OFXqjBklaZNNPB473MNZOFdg4b
1NhxJE5enx8LsSVk6QyE0VWhlgr/qepeX/QgWm2sliX9ODl8iT8gVe/kw/lx
L9uqmsVE2ZF4/FgMBqKeayfwbz2HIsdHwt/ti8rUfI0FDFeH+CcroMooy03l
VOUaNxK1bVR2ORIHmbRKjsThh/NsZeznmTXNciRenYzPDs+P3mSf1RqXi1Em
BuL05PQ1/Rl1pL8v2KKkH/2Sy2Wpc7ZpdqmqBnsKcXtJIbw5PmI7Xc3ET3Qf
VxdSl7BtMOcLrerp0NgZ7kibz0diXtdLN9rdXa1Ww3hzl15ayGq3hDPJS7vx
fdpY1/NmMhK7q8/NQlq9+xV+w2slbOXqdj+/zDA3iz+0UCabem4sWQ6L6gpG
Px2KX5p8rqxcrXHNB9MpryLGm/eUt4Zrlso2TtkXM7pAQuCmNRTNPmA6y3+k
JUi+tPZHaa2q2quw2Ej8ZMysVO0eK37ohVdtWKm6s+SHoRiXRlZpxQ9mkq7c
u5pduE8vZnyRpc2yytgFQuKSgwHRuv/4yXcjpAGFE2Uebjohq0KoKjcFIsKl
557Sc6/UVFea89RMOwGXHvv+e17OFKoUtVkOSnWJv3Ujk5/b2/uBnvtFrQWF
tOOsh22hKd1HNhlxUhUUv1Qefmu0VQskp3hL64Xdnj79jnf7dUkpRa+wGlbN
pCXZRS+fS+tU3RNLaWGyWlkxh3Yl3cROtbqqG1ne1ePps4NnrEe6IdxS5Xoa
EsrbyHbLFmItV0VjO0uwiodFwfbCNp2KN0bO5zWeLsR4XdXySoxR6fRVfPv7
g8cH9Pb/nb69K92zx8/26OYxitkXjPzD0x+e0GM/NRre0JXyVuaatOHGSq3u
XcaldThG3shlrXP3hR2f7D9jnU+bstbLxi4NPHpSweyIZHGKmBSvr2pUPTbh
NnlrR5xJW0OVBgV1AwfObhn0ydMn7JNzyP9SOrX3tM9/Huz32Rv096dPxCtZ
S/F6M3q/3/vuh/jqz/JSjnOrl7V4P/mk8lq8M7Xfcfvn8ft3O34FlhrhU80U
hKO8wFJnoZ5Q8qBySjtTqE29WJxiuRkW6nK3558JYHcX0DKqkJvJ+OyJTzIS
89zKyi0NTPNWrhG2Y5U3VtdrsX3+drzTAuTfsRjJvjc8CN7af8zeetnokpMg
PurECsVTvDk/P8OTR+8/vPRqpNLI/3AdOZpbs9DNYkOFI2ucG7y3ekY5qiQs
XpqcUYPC6qOaoDogKsyS9etaqIsWeVibEeONWajdeGXggo67ubGTARYdFGnB
DAtSvIzfnRwfPyj4xzeH5x9/2hCbS8K40siuCk+81Zck8bhGyKBK3C8ngYej
V4aU9cPVXNarGQu8xbhCET9gKGW5Dqv1gxKdtVjWyiSr9ZCDRYyBMgvZKav3
C9SBvWVw58QHUgq63UlpJgTB1a6z+a6v+u3dtCUJ/FJX0v5BmePF8LL4iIqc
8kyMYaf7Rd9ICvyYoRAv8MpgRmXJ7UagyWJ+URJ+o2j06r9MsE8OxCkKtf8N
Eu1H775FFWkkCsm4iyFfIZVVcDEM1PEj/2V/QHGZhDv4BuEO/jThDpJwrz3y
7T/e/xYJ4+uC3v8zpFV+/QGtH2QegM/LCUFQXmfZOTF7NBoNMw+P9ki5LkLe
260AjwRSdQHZlYe7SanwFsGJdgt+BzQS7YX+J8Woa8kAiIwcejkWuihA5rIt
wiJrCjxC1rje0vTzJstubyu2e1E319sRK+grdHgVS2uy5ONnQoK8iKlVCj0N
Wh7hAL05fizBtQmRBp1e6JbQdQIlAlwHxkuuAIO4pcGISIb2hG6O/SYK5lBA
vBz9jYPK5ToaiBZK+asXy5JpXiBZ6goWJ8HRVazRC3jfQ9GjR4/64mirD6y2
dR+8t8+43he/mBpMpx+gHdA6OOqLszXCrup3oL8vPjSTdV+MV3pae/oAkJnL
pRMGolu3A66tlLi+jrLd3LAFFoaNGpDbVMPgBpKeOjrI68ggsiLTKzuV+Qbb
ijrAVyev3vZ2+gBlrBiLYKTgXqT48CByzzsG2kYQIgdK2FNXl6ZkbJNipir0
LjW8cXh2sgMPwx+yFnmp8arnroi/S4qZHJJOIADcgkXg+NKs8V7j/ErBS46z
b9h6Cr0QxQFygakewpv1iB0EmUq3DGoEQ3rYuLmBxnOdz6ljNuCTC/1PbEfP
e0MApnNIma+9CYIDqLC3ry7IT0RjW3F8dQAfNhCaYSCFJFw0DsmGnQwHBmyA
zUyeS8fUHKqn2MZDRJQo6nyek+kW8rPicN7sesS24ygJnRSCBDzXqd92qBnR
lEF6ukbzsUaXVrihOMxBbQpOgH4GsmMpx0hPVBoaOOSbzQjtWATSDntFRr0y
TVnAaxXiqkYqm8VGKzIUtwvXb42iuEQW4O3uoxyrJ4fvDodUZ868nGAjjrPE
l5ui/XVDNVE5tSEjWZLlpIYKTmmLBBWGu5Y3VbkeCia5SAHW3t/q5AkSQE+7
Luknpf1eTGWpKMglat4Sm1ADiGrbEW2YnQSJ5qh2Yqpn1ExgidKs+ixGuKtt
QbLWrJrfB7zTbm5W31F8O0SaupKUlhTRyB+dQ9wd2POwSndC4NRBZcSGz2iI
D7BDGgLCghFGWfb7779nAZvEj6JH8NR7nmWgpI4qh39eXAPz4EZKU5oG4Mm9
5zwpqA/2EXr4vf+8fYQHArh28Dy74Q264kG0JZdIpHuhfMBDZOd/tsWEIy0q
0SlqcmIuuf2m8g4/cPFzYNg5r/2AjmHPbOn1+TEotr0TrgxZib39gyfxQtCz
97OZV+KVUb14I2rX+1QY9SKoRWy5d5+upIEXOUmprpYIjRDEnoDym2TkHm3b
G3W27dNVXeAaSce/WAJ66K4Ewd5bLSc9IqAoVEzB661Y/m86aJIqbArUtobe
LY0PVd6+mADQSGtfOilZ7wP6YYYmV0w8taebzodBpWATeJZTEcWmAl8KT6Xs
ZL4z8d33BXQD46kH3L+ClQyi1hdi+wokjBbjeknt/M3NDmWNJXqwIEGKIVeY
TppBmbxsCqozFQMGT1J60WLdyY728yKysFf2FqrykNbczmpcxxK1zptS2liq
uT75sW7Y35fhaUOIklidLtGtDsXfUeEKcSnLJo1YqFonwcjoPW+1HruuR71F
zyMc84348umv43MSsOZEKpirIXatNRYieUaiZSUDGwmjHAkM9hsrmc9jiNcr
kzgrlupULiz1K+N7EiouxvWMzU7jbpYy3Ytup7tfkpNCPUwlKLYvw1+7sb1N
tjcNoC/MxcGDaNJreRwvmKtbH3hYOZLaPYCA9MBveAqBQEDlv6SSE3bhUhZp
fzuv2fcML/w6AOlBIeEN+6m402+SIAHBRJGJEkj7YT4IC9eQldUUaCFcvRKQ
1Zlcy7oDGb42s0IcfAokrUnISw9E6pLgoT056FAqKNPlDjDcHWTtFOrJmrEx
qaKplC+WyI0JM7WAnRx6AYo7GbdJEFAQU8yFXIi1iUMjWJ5sFXToiN0Xbs54
itLBkJqqEpxfGNaUjcM1Jurvs5eYKZmL63QqVOAOWXYUiCyHoVWsfSRZUT3R
VEFMGCSGRziFoRBNA7U71TiOoTzbiQvHPLhFAkD6awkbVUYU0DuHgCgPWKGW
ZGtC0KH4ONfED+rgiEU45ZIpJLto2ilRksy/bGpOhA00Jr7MVoJEPHumHs+B
6aPizBnwkwze2Fzo+EhIuWjsEHqxzfCBF+PKm6Pb32CXS5qMkK7RRn2fgUTX
CXVm/hqko3gjSCWNqNfQEG+UOhDfAHMDMu2o4isuaQpQtlUMHrRtgHdIvHAK
4cCp41Ie+RLuZUNkcuQsJddm0nVbDWdDDzk0XwXkDMXJrTYq7AOz56jV06aE
RCqM9J1LQ1QyQqk/K06eDlbKegShF7KkH6qIhNt7LbnYKwzd4lZ0bsVFru9r
tycNyO2yNHzuISluqe+1oH1yYZqq9v0HulCyvCGk1b77Q3bnDH0eT2hmGhl+
5U3k94dDwYpRSHzOOTlVeJ0I6llH0E4E+PeR1WrSDyGMzZBWkg8fBJ1h2kAa
8dya0Y4CiVkIYiDhg5cstSWUP33vMNxue/MRtmopQSAWg4Tlwe5JWgTZko5S
HfuMiwyaJD9ygXgQ4JJ2Axr7lhaS8GCAM5eYDyqBj8QQBT7DyKhTA0+sPF8s
KILJ+hxJNGRHPeysH1YTLkyafYKX5WacUD4dN5YM0fcx5htt37Fu2v2OrcnC
oYaUSrL7JtasHENLMH+Sw7eLHtH7aQLADsqZn89BX2rhh/pjjWgLhyInVOM9
liJJkVMDqtmVKgGBtcw/uyByrfJ5pSnQkw+/cEKwfX1NJw6cfeD53op0REZd
fRK0K31gcwHNxMUjYiMX2Gvij+P4uMz330warq/T8QB2eU4qs4G7g7buqIb3
gQm9gRq2IuMJ5QJZ8qJzgJ6GhkEKPlTgHhO1fcOLfXERDh0v2NApPpRlnEhx
DBGm3s7RrpDYixECMfaIuk7B5PvNeLjlc9m3BocV9QVsGoouxnzvIj8eQpnX
1eeIrStGlpopdwAcFIQ4IuVLZsLyeoxwAa9mSJyKd3ku5mbF2RbLNoNHQlw4
bUXHjmuPZA+N+BiKaQBxF4aZc9wdwqZZxiZRodS812MXzP2+5Ez5wEQXT3iK
zjwuHhLe3ucqfWVw0X/oDux60b8rR/tAKwmIDmqfJ9WlRu1zaEW3tu5+IkNC
9e7Tqtc5Z4b5KCL85wLdD0Kyccgjf6v9UCKctRdt+wLYRteHpd7H7qtzK8v+
Ji5iQF6k2V7IXe8m309M2xhIOUAWgXdTGzJZx3aGVbzfn/1uo3erL45k+fBe
tk4EJ+Bjm4Z+/pkGbQ/EEBfQjaZOh45roxUkawSu+YAxOo1K4spJmI1vDMR2
7ANu8bSd0LREU13sXXxR48RANjbzg7sgDpT/Sg3Fr1X7zq0FWxrV6QvnkofS
UW8W9sGBfyR8ea4ARVTxYvvISm1ux5yZNtlUfXNNFJjXnZLbKTGjAM00Hg6t
wO0H/HA39QM3VG9hGSZX3h53XjnfGEtv+DNNMjotE/NWr2DLpSaAg5W0RWra
/FYMZ6R+Q0Lw2xs9T1N9rsyKaSsEJPJL7L2ZlNrNVbEpzGjjaCPLDtuod2kA
6AOirY0jOunulpHQa6UpkboKX0wQdajpqKRzMJQm7znRhDSF4mbgLiocWznj
ih+m6Jqp86at3yEIadDafmHTOZkZZf6Y8dWtgsoVrzOm8Yp9U0n3G5zKmc5D
Z7ntdsLp5jF1fCp+7NJeP5U5gNe4uZjSE1wbqbHjJ7Iw2/2vMK+VRUE9FI9W
qc/M6zCFYga5oW0bdP/47/TdY63kovP91z/+xwcwo35Dw+SROHp/evr+HdV9
mhTnifKH2++48h/6c9v2gzNscuvbMlr7yDufRLWgzvSJ5FdKdRbTAD7sovr/
guCFLzUcFRXF09Adkut+VLwXER/5Qda3w+Ij/y3AvdiY6F6s93E2hmvkuIum
ng6eXYjtHGA+0PzRp6YGhM4I/jRIvfCE4msA1XOPe1D17nj5Xw6skdT/ha7/
eeg6psknRFT3P3CHSCcKHPzkD2O4UaTv96hRHCv/DcTe3vAv1P4LtcWtBuov
PP734jH18DV/OXVWKqBdMtJDW7H12pbewMCfGhqckos3In8oTpyjWdNCrqkE
WqmdL05/4BPJ8GEVJSpJe5hT5pWq4JB12fXIB40qfuxNZelUDyn23mr6Wlsp
BEcYMvujPh7vT5FCtJyfqENo+t82htn/A2sGGsDnMgAA

-->

</rfc>
