<?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.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-trammell-443-is-enough-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="443 is Enough">443 is Enough: Guidance on Port Allocation for HTTP-based Services</title>
    <seriesInfo name="Internet-Draft" value="draft-trammell-443-is-enough-00"/>
    <author fullname="Brian Trammell">
      <organization/>
      <address>
        <email>ietf@trammell.ch</email>
      </address>
    </author>
    <date year="2026" month="June" day="22"/>
    <area>Web and Internet Transport (WIT)</area>
    <keyword>HTTP</keyword>
    <keyword>port allocation</keyword>
    <keyword>IANA</keyword>
    <keyword>service registration</keyword>
    <abstract>
      <?line 44?>

<t><xref target="RFC7605"/> provides guidance on the use of port numbers and the criteria for
new port assignments, including a test for whether a proposed service is
distinct from an existing service. It gives the example that "an automated
system that happens to use HTTP framing -- but is not primarily accessed by a
browser -- might be a new service." It also might not. This document clarifies
the application of the distinct-protocol test in <xref target="RFC7605"/> Section 7.1 to
services built on HTTP as a substrate, in light of HTTP's evolution since its
publication, and provides guidance to applicants and reviewers on when an
HTTP-based service qualifies for a new port assignment and when it does not.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://britram.github.io/draft-trammell-443-is-enough/draft-trammell-443-is-enough.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-trammell-443-is-enough/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/britram/draft-trammell-443-is-enough"/>.</t>
    </note>
  </front>
  <middle>
    <?line 56?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RFC7605"/> provides guidance on when a new port assignment is warranted,
including a distinctness test in Section 7.1: a new service merits an
assignment only if an unmodified client of an existing service cannot
interact with it.</t>
      <t>In the decade since that document was published in 2015, HTTP has become an
overwhelming popular de facto substrate for application protocol design -- a
development that <xref target="RFC9205"/> both documents and embraces. Section 7.1's
observation that "an automated system that happens to use HTTP framing -- but is
not primarily accessed by a browser -- might be a new service" was intended to
leave room for novel cases. The evolution of and investment in the HTTP
ecosystem since then has only made the use of HTTP and the ecosystem surrounding
it as a substrate more attractive. One practical consequence of this development
has been some confusion about whether new protocols over HTTP are new protocols
in the sense of "requiring a port assignment".</t>
      <t>This document clarifies how the <xref target="RFC7605"/> Section 7.1 distinctness test
applies to HTTP-based services, and provides guidance to applicants and
reviewers on when it is and is not satisfied.</t>
    </section>
    <section anchor="http-as-an-application-transport-substrate">
      <name>HTTP as an Application Transport Substrate</name>
      <t>HTTP has evolved since its origins as the basis of the World Wide Web. HTTP/2
<xref target="RFC9113"/> redesigned HTTP's wire format around multiplexed binary framing with
non-browser use as an explicit design goal; HTTP/3 <xref target="RFC9114"/> continues this
evolution over QUIC <xref target="RFC9000"/>. <xref target="RFC9205"/> provides detailed guidance on
building new protocols beyond the web atop HTTP. The benefits of this approach
are substantial: HTTP-based services can leverage existing infrastructure
including reverse proxies, load balancers, content delivery networks, and
firewalls; they interoperate naturally with web clients; and they inherit
well-established security properties including TLS certificate management and
authentication frameworks.</t>
      <t>The HTTP ecosystem also provides a rich set of mechanisms for service
differentiation and discovery that do not require dedicated port assignments,
such as Application-Layer Protocol Negotiation (ALPN) <xref target="RFC7301"/> and Well-Known
URIs <xref target="RFC8615"/> supporting service discovery at different points in the
protocol handshake. A service that requires a new ALPN identifier should
register it in the IANA TLS ALPN Protocol IDs registry, not seek a new port
assignment.</t>
    </section>
    <section anchor="evaluating-http-based-protocols-for-distinctness">
      <name>Evaluating HTTP-Based Protocols for Distinctness</name>
      <t>Section 7.1 of <xref target="RFC7605"/> establishes one useful test for whether a proposed
service warrants a new port assignment: can an unmodified client of an existing
service interact with the proposed service? Interoperability implies
non-distinctness, and a non-distinct protocol does not merit a new assignment.</t>
      <t>For HTTP-based services, this test is easy to implement: can an unmodified
generic HTTP client tool such as curl issue requests to and receive valid
responses from the proposed service? Service differentiation achieved through
URL path structure, HTTP header values, Content-Type negotiation, payload
schema, or authentication scheme does not constitute wire-level distinctness;
these are application-layer conventions carried within HTTP, not independent
protocols.</t>
      <t>This does not mean that all HTTP-based protocols are indistinct. Examples that
might warrant an assignment include: a REST API running over the same TLS
connection as a protocol with a different wire format, using a protocol-specific
multiplexing scheme; or a protocol running on UDP or SCTP that uses a REST API
over TCP as a control or management plane. The former would not interoperate
with an unmodified client, and the latter has incomplete semantics when used as
such.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The intended effect of the guidance given by this document is effectively to
reduce port assignments for HTTP-based services, directing these services to use
port 443 rather than dedicated port assignments. This has implications for
overall network security: traffic from non-Web HTTP applications running on port
443 is less distinguishable from other traffic in the face of metadata
examination. TLS deployment is more likely to be properly configured when
services share the standard HTTPS port and its associated certificate management
infrastructure, and network operators can apply consistent security policy
across all services on that port. <xref target="RFC9205"/> Section 4.4.3 notes that deploying
an HTTP-based application on a non-default port carries privacy implications
because the protocol becomes distinguishable from other traffic; the guidance in
this document is consistent with minimizing that distinguishability.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions. It is intended as guidance for IANA Transport
Port Expert Reviewers.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7605">
          <front>
            <title>Recommendations on Using Assigned Transport Port Numbers</title>
            <author fullname="J. Touch" initials="J." surname="Touch"/>
            <date month="August" year="2015"/>
            <abstract>
              <t>This document provides recommendations to designers of application and service protocols on how to use the transport protocol port number space and when to request a port assignment from IANA. It provides designer guidance to requesters or users of port numbers on how to interact with IANA using the processes defined in RFC 6335; thus, this document complements (but does not update) that document.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="165"/>
          <seriesInfo name="RFC" value="7605"/>
          <seriesInfo name="DOI" value="10.17487/RFC7605"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="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="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="RFC6455">
          <front>
            <title>The WebSocket Protocol</title>
            <author fullname="I. Fette" initials="I." surname="Fette"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. The security model used for this is the origin-based security model commonly used by web browsers. The protocol consists of an opening handshake followed by basic message framing, layered over TCP. The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or s and long polling). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6455"/>
          <seriesInfo name="DOI" value="10.17487/RFC6455"/>
        </reference>
      </references>
    </references>
    <?line 144?>

<section numbered="false" anchor="disclosure">
      <name>Disclosure</name>
      <t>LLM-based tools (Claude Code, Sonnet 4.6) were used in the workflow management,
reference and archival research, initial draft generation, and editorial review
of this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Da8gh8R4eVDithD/A2Wl2+orGQAA

-->

</rfc>
