<?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.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dispatch-mime-protobuf-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title>Media Type Registration for Protocol Buffers</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-dispatch-mime-protobuf-02"/>
    <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="July" day="21"/>
    <area>ART</area>
    <workgroup>DISPATCH</workgroup>
    <keyword>MIME</keyword>
    <keyword>protobuf</keyword>
    <keyword>media type</keyword>
    <keyword>application</keyword>
    <abstract>
      <?line 127?>

<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-ietf-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 131?>

<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>Proto2 was the first public version of the Protobuf schema language, and Proto3 and Edition 2023 came later, with the last of these being current at the time of writing. Future editions of the IDL are expected.</t>
      <t>These versions refer 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>Note that there may be semantic changes implicit in the IDL version which can affect the interpretation of otherwise compatible bits on the wire. For example, in Proto2, unknown values of an enumeration were interpreted as invalid, whereas in Proto3 they are retained.</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>Protobuf supports embedded content in <tt>string</tt> or <tt>bytes</tt> fields: in both cases, applications should ensure that the format of the content is precisely as expected. Note that UTF-8 validation of <tt>string</tt> fields is optional (see <xref target="ProtoFeatures"/>) and a manual well-formedness check may be necessary. Further, handling Unicode text generally can be quite complex with problems discussed, for example, in <xref target="UniChars"/> and <xref target="RFC8264"/>; so it is best to rely on well-supported internationalization libraries whenever possible.</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> media 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="RFC8264">
          <front>
            <title>PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="M. Blanchet" initials="M." surname="Blanchet"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>Application protocols using Unicode code points in protocol strings need to properly handle such strings in order to enforce internationalization rules for strings placed in various protocol slots (such as addresses and identifiers) and to perform valid comparison operations (e.g., for purposes of authentication or authorization). This document defines a framework enabling application protocols to perform the preparation, enforcement, and comparison of internationalized strings ("PRECIS") in a way that depends on the properties of Unicode code points and thus is more agile with respect to versions of Unicode. As a result, this framework provides a more sustainable approach to the handling of internationalized strings than the previous framework, known as Stringprep (RFC 3454). This document obsoletes RFC 7564.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8264"/>
          <seriesInfo name="DOI" value="10.17487/RFC8264"/>
        </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>
        <reference anchor="ProtoFeatures" target="https://protobuf.dev/editions/features/">
          <front>
            <title>Protobuf Feature Settings for Editions</title>
            <author>
              <organization>Protobuf</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="UniChars" target="https://datatracker.ietf.org/doc/draft-bray-unichars/">
          <front>
            <title>Unicode Character Repertoire Subsets</title>
            <author>
              <organization>IETF</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 306?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Orie Steele provided valuable feedback to this work.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1bbW/bRrb+zl8xUIALeyPJsZ2mqXJ7bxwnbtzGiRE5m/th
P2hEjqRJKFLlDC1rA/e33+eceSEp2UEbbLHAosVia/Fl5rw+5zln2MFgkFht
czUSvQuVaSmuNisl3qu5NraSVpeFmJWVuKxKW6ZlLl7Us5mqTC9JpVXzstqM
hC5mZZJkZVrIJdbJKjmzA63sbJBps5I2XQyWeqkGK1pjWs8Gj44SU0+X2hgs
b7HfSJy/ujoT4oGQuSkhii4ytVL4v8L2+qIHwWxZaZnTj/OTF/gXZOqdv786
6yUPino5VdVIPHokBgNhF9oI/M8uoMbZqXB3+6IoLV9j8fzVIf5JMigyStKy
MKowtRkJW9UquR6J40RWSo7EyfurZF1Wn+dVWa9G4uX5+PLk6vR18lltcDkb
JWIgLs4vXtG/g47095LtSfrRL7la5TpliybXqqixpxDbSwrhzPER2+liLn6i
+7i6lDqHZb05n5Nxh2U1xx1ZpYuRWFi7MqODg/V6PQw3D+ilpSwOcriSfHQQ
3qeNtV3U05E4WH+ul7LSB85ry7qq5OYev+G1HLYyttnPLTNMy+UfWiiRtV2U
FVkOi+oCRr8Yil/qdKEqud7gmgulC15FjLv3lLOGqVeqqo2qns/pAgmBm1VJ
sewCprX8R1qC5Itrf5RVpYrmKiw2Ej+V5TxXzR5rfui5U21YKNta8v1QjPNS
FnHF9+U0XrlztWppPj2f80WWNkmKsloiJK45GBCtR48efzdCGlA4Ud7hphGy
yIQq0jJDRJj43BN67qWa6UJzlpazVsDFx77/npcrM5ULW64GubrGX+3I5OcO
D3+g535RG0EhbTjnYVtoSveRTaU4LzKKXwKHX2tdqSWSU7yh9fxuT558x7t9
WFFK0SusRqXmsiLZRS9dyMoo2xMrWcFkVlViAe1yuomdrLqxtcx39Xjy9Pgp
6xFvCLNSqZ75hHI2qtqghVhLVVZXrSVYxZMsY3thmxbejZHzqcXTmRhvCitv
xBg4p2/C298fPzqmt//v4s2udE8fPT2km2cAs68Y+YcnPzymx36qNbyhC+Ws
zJjUcWOh1ncuY+I6HCOv5crq1Hxlx8dHT1nnizq3elVXqxIePS9gdkSyuEBM
ilc3FqjHJtwjb+2LS1lZqFIDUDtV4HLLoI+fPGafXEH+F9Kowyd9/vfxUZ+9
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
7nQFQtN/ATZM/h92avrxMDcAAA==

-->

</rfc>
