6648
BEST CURRENT PRACTICE

Deprecating the "X-" Prefix and Similar Constructs in Application Protocols

Authors: P. Saint-Andre, D. Crocker, M. Nottingham
Date: June 2012
Area: app
Working Group: appsawg
Stream: IETF

Abstract

Historically, designers and implementers of application protocols have often distinguished between standardized and unstandardized parameters by prefixing the names of unstandardized parameters with the string "X-" or similar constructs. In practice, that convention causes more problems than it solves. Therefore, this document deprecates the convention for newly defined parameters with textual (as opposed to numerical) names in application protocols. This memo documents an Internet Best Current Practice.

RFC 6648: Deprecating the "X-" Prefix and Similar Constructs in Application Protocols [RFC Home] [TEXT|PDF|HTML] [Tracker] [IPR] [Errata] [Info page]

BEST CURRENT PRACTICE
Errata Exist
Internet Engineering Task Force (IETF)                    P. Saint-Andre
Request for Comments: 6648                           Cisco Systems, Inc.
BCP: 178                                                      D. Crocker
Category: Best Current Practice              Brandenburg InternetWorking
ISSN: 2070-1721                                            M. Nottingham
                                                               Rackspace
                                                               June 2012


           <span class="h1">Deprecating the "X-" Prefix and Similar Constructs</span>
                        <span class="h1">in Application Protocols</span>

Abstract

   Historically, designers and implementers of application protocols
   have often distinguished between standardized and unstandardized
   parameters by prefixing the names of unstandardized parameters with
   the string "X-" or similar constructs.  In practice, that convention
   causes more problems than it solves.  Therefore, this document
   deprecates the convention for newly defined parameters with textual
   (as opposed to numerical) names in application protocols.

Status of This Memo

   This memo documents an Internet Best Current Practice.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   BCPs is available in <a href="./rfc5741#section-2">Section 2 of RFC 5741</a>.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   <a href="https://www.rfc-editor.org/info/rfc6648">http://www.rfc-editor.org/info/rfc6648</a>.
















<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 1]</span>

<span id="page-2" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


Copyright Notice

   Copyright (c) 2012 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   <a href="#section-1">1</a>. Introduction ....................................................<a href="#page-2">2</a>
   <a href="#section-2">2</a>. Recommendations for Implementers of Application Protocols .......<a href="#page-4">4</a>
   <a href="#section-3">3</a>. Recommendations for Creators of New Parameters ..................<a href="#page-4">4</a>
   <a href="#section-4">4</a>. Recommendations for Protocol Designers ..........................<a href="#page-4">4</a>
   <a href="#section-5">5</a>. Security Considerations .........................................<a href="#page-5">5</a>
   <a href="#section-6">6</a>. IANA Considerations .............................................<a href="#page-5">5</a>
   <a href="#section-7">7</a>. Acknowledgements ................................................<a href="#page-5">5</a>
   <a href="#appendix-A">Appendix A</a>.  Background ............................................<a href="#page-6">6</a>
   <a href="#appendix-B">Appendix B</a>.  Analysis ..............................................<a href="#page-7">7</a>
   References ........................................................<a href="#page-10">10</a>
      Normative References ...........................................<a href="#page-10">10</a>
      Informative References .........................................<a href="#page-10">10</a>

<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>.  Introduction</span>

   Many application protocols use parameters with textual (as opposed to
   numerical) names to identify data (media types, header fields in
   Internet mail messages and HTTP requests, vCard parameters and
   properties, etc.).  Historically, designers and implementers of
   application protocols have often distinguished between standardized
   and unstandardized parameters by prefixing the names of
   unstandardized parameters with the string "X-" or similar constructs
   (e.g., "x."), where the "X" is commonly understood to stand for
   "eXperimental" or "eXtension".

   Under this convention, the name of a parameter not only identified
   the data, but also embedded the status of the parameter into the name
   itself: a parameter defined in a specification produced by a
   recognized standards development organization (or registered
   according to processes defined in such a specification) did not start




<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 2]</span>

<span id="page-3" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   with "X-" or similar constructs, whereas a parameter defined outside
   such a specification or process started with "X-" or similar
   constructs.

   As explained more fully under <a href="#appendix-A">Appendix A</a>, this convention was
   encouraged for many years in application protocols such as file
   transfer, email, and the World Wide Web.  In particular, it was
   codified for email by [<a href="./rfc822" title=""Standard for the format of ARPA Internet text messages"">RFC822</a>] (via the distinction between
   "Extension-fields" and "user-defined-fields"), but then removed by
   [<a href="./rfc2822" title=""Internet Message Format"">RFC2822</a>] based on implementation and deployment experience.  A
   similar progression occurred for SIP technologies with regard to the
   "P-" header, as explained in [<a href="./rfc5727" title=""Change Process for the Session Initiation Protocol (SIP) and the Real- time Applications and Infrastructure Area"">RFC5727</a>].  The reasoning behind those
   changes is explored under <a href="#appendix-B">Appendix B</a>.

   In short, although in theory the "X-" convention was a good way to
   avoid collisions (and attendant interoperability problems) between
   standardized parameters and unstandardized parameters, in practice
   the benefits have been outweighed by the costs associated with the
   leakage of unstandardized parameters into the standards space.

   This document generalizes from the experience of the email and SIP
   communities by doing the following:

   1.  Deprecates the "X-" convention for newly defined parameters in
       application protocols, including new parameters for established
       protocols.  This change applies even where the "X-" convention
       was only implicit, and not explicitly provided, such as was done
       for email in [<a href="./rfc822" title=""Standard for the format of ARPA Internet text messages"">RFC822</a>].

   2.  Makes specific recommendations about how to proceed in a world
       without the distinction between standardized and unstandardized
       parameters (although only for parameters with textual names, not
       parameters that are expressed as numbers, which are out of the
       scope of this document).

   3.  Does not recommend against the practice of private, local,
       preliminary, experimental, or implementation-specific parameters,
       only against the use of "X-" and similar constructs in the names
       of such parameters.

   4.  Makes no recommendation as to whether existing "X-" parameters
       ought to remain in use or be migrated to a format without the
       "X-"; this is a matter for the creators or maintainers of those
       parameters.







<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 3]</span>

<span id="page-4" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   5.  Does not override existing specifications that legislate the use
       of "X-" for particular application protocols (e.g., the "x-name"
       token in [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>]); this is a matter for the designers of those
       protocols.

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   [<a href="./rfc2119" title=""Key words for use in RFCs to Indicate Requirement Levels"">RFC2119</a>].

<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>.  Recommendations for Implementers of Application Protocols</span>

   Implementations of application protocols MUST NOT make any
   assumptions about the status of a parameter, nor take automatic
   action regarding a parameter, based solely on the presence or absence
   of "X-" or a similar construct in the parameter's name.

<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>.  Recommendations for Creators of New Parameters</span>

   Creators of new parameters to be used in the context of application
   protocols:

   1.  SHOULD assume that all parameters they create might become
       standardized, public, commonly deployed, or usable across
       multiple implementations.

   2.  SHOULD employ meaningful parameter names that they have reason to
       believe are currently unused.

   3.  SHOULD NOT prefix their parameter names with "X-" or similar
       constructs.

   Note: If the relevant parameter name space has conventions about
   associating parameter names with those who create them, a parameter
   name could incorporate the organization's name or primary domain name
   (see <a href="#appendix-B">Appendix B</a> for examples).

<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>.  Recommendations for Protocol Designers</span>

   Designers of new application protocols that allow extensions using
   parameters:

   1.  SHOULD establish registries with potentially unlimited value-
       spaces, defining both permanent and provisional registries if
       appropriate.

   2.  SHOULD define simple, clear registration procedures.




<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 4]</span>

<span id="page-5" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   3.  SHOULD mandate registration of all non-private parameters,
       independent of the form of the parameter names.

   4.  SHOULD NOT prohibit parameters with an "X-" prefix or similar
       constructs from being registered.

   5.  MUST NOT stipulate that a parameter with an "X-" prefix or
       similar constructs needs to be understood as unstandardized.

   6.  MUST NOT stipulate that a parameter without an "X-" prefix or
       similar constructs needs to be understood as standardized.

<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>.  Security Considerations</span>

   Interoperability and migration issues with security-critical
   parameters can result in unnecessary vulnerabilities (see <a href="#appendix-B">Appendix B</a>
   for further discussion).

   As a corollary to the recommendation provided under <a href="#section-2">Section 2</a>,
   implementations MUST NOT assume that standardized parameters are
   "secure" whereas unstandardized parameters are "insecure", based
   solely on the names of such parameters.

<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>.  IANA Considerations</span>

   This document does not modify registration procedures currently in
   force for various application protocols.  However, such procedures
   might be updated in the future to incorporate the best practices
   defined in this document.

<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>.  Acknowledgements</span>

   Thanks to Claudio Allocchio, Adam Barth, Nathaniel Borenstein, Eric
   Burger, Stuart Cheshire, Al Constanzo, Dave Cridland, Ralph Droms,
   Martin Duerst, Frank Ellermann, J.D. Falk, Ned Freed, Tony Finch,
   Randall Gellens, Tony Hansen, Ted Hardie, Joe Hildebrand, Alfred
   Hoenes, Paul Hoffman, Eric Johnson, Scott Kelly, Scott Kitterman,
   John Klensin, Graham Klyne, Murray Kucherawy, Eliot Lear, John
   Levine, Bill McQuillan, Alexey Melnikov, Subramanian Moonesamy, Keith
   Moore, Ben Niven-Jenkins, Zoltan Ordogh, Tim Petch, Dirk Pranke,
   Randy Presuhn, Julian Reschke, Dan Romascanu, Doug Royer, Andrew
   Sullivan, Henry Thompson, Martin Thomson, Matthew Wild, Nicolas
   Williams, Tim Williams, Mykyta Yevstifeyev, and Kurt Zeilenga for
   their feedback.







<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 5]</span>

<span id="page-6" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


<span class="h2"><a class="selflink" id="appendix-A" href="#appendix-A">Appendix A</a>.  Background</span>

   The beginnings of the "X-" convention can be found in a suggestion
   made by Brian Harvey in 1975 with regard to FTP parameters [<a href="./rfc691" title=""One more try on the FTP"">RFC691</a>]:

      Thus, FTP servers which care about the distinction between Telnet
      print and non-print could implement SRVR N and SRVR T.  Ideally
      the SRVR parameters should be registered with Jon Postel to avoid
      conflicts, although it is not a disaster if two sites use the same
      parameter for different things.  I suggest that parameters be
      allowed to be more than one letter, and that an initial letter X
      be used for really local idiosyncracies [sic].

   This "X" prefix was subsequently used in [<a href="./rfc737" title=""FTP extension: XSEN"">RFC737</a>], [<a href="./rfc743" title=""FTP extension: XRSQ/XRCP"">RFC743</a>], and
   [<a href="./rfc775" title=""Directory oriented FTP commands"">RFC775</a>].  This usage was noted in [<a href="./rfc1123" title=""Requirements for Internet Hosts - Application and Support"">RFC1123</a>]:

      FTP allows "experimental" commands, whose names begin with "X".
      If these commands are subsequently adopted as standards, there may
      still be existing implementations using the "X" form....  All FTP
      implementations SHOULD recognize both forms of these commands, by
      simply equating them with extra entries in the command lookup
      table.

   The "X-" convention has been used for email header fields since at
   least the publication of [<a href="./rfc822" title=""Standard for the format of ARPA Internet text messages"">RFC822</a>] in 1982, which distinguished
   between "Extension-fields" and "user-defined-fields" as follows:

      The prefatory string "X-" will never be used in the names of
      Extension-fields.  This provides user-defined fields with a
      protected set of names.

   That rule was restated by [<a href="./rfc1154" title=""Encoding header field for internet messages"">RFC1154</a>] as follows:

      Keywords beginning with "X-" are permanently reserved to
      implementation-specific use.  No standard registered encoding
      keyword will ever begin with "X-".

   This convention continued with various specifications for media types
   ([<a href="./rfc2045" title=""Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies"">RFC2045</a>], [<a href="./rfc2046" title=""Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types"">RFC2046</a>], [<a href="./rfc2047" title=""MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text"">RFC2047</a>]), HTTP headers ([<a href="./rfc2068" title=""Hypertext Transfer Protocol -- HTTP/1.1"">RFC2068</a>],
   [<a href="./rfc2616" title=""Hypertext Transfer Protocol -- HTTP/1.1"">RFC2616</a>]), vCard parameters and properties ([<a href="./rfc2426" title=""vCard MIME Directory Profile"">RFC2426</a>]), Uniform
   Resource Names ([<a href="./rfc3406" title=""Uniform Resource Names (URN) Namespace Definition Mechanisms"">RFC3406</a>]), Lightweight Directory Access Protocol
   (LDAP) field names ([<a href="./rfc4512" title=""Lightweight Directory Access Protocol (LDAP): Directory Information Models"">RFC4512</a>]), and other application technologies.

   However, use of the "X-" prefix in email headers was effectively
   deprecated between the publication of [<a href="./rfc822" title=""Standard for the format of ARPA Internet text messages"">RFC822</a>] in 1982 and the
   publication of [<a href="./rfc2822" title=""Internet Message Format"">RFC2822</a>] in 2001 by removing the distinction between
   the "extension-field" construct and the "user-defined-field"




<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 6]</span>

<span id="page-7" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   construct (a similar change happened with regard to Session
   Initiation Protocol "P-" headers when [<a href="./rfc3427" title=""Change Process for the Session Initiation Protocol (SIP)"">RFC3427</a>] was obsoleted by
   [<a href="./rfc5727" title=""Change Process for the Session Initiation Protocol (SIP) and the Real- time Applications and Infrastructure Area"">RFC5727</a>]).

   Despite the fact that parameters containing the "X-" string have been
   effectively deprecated in email headers, they continue to be used in
   a wide variety of application protocols.  The two primary situations
   motivating such use are:

   1.  Experiments that are intended to possibly be standardized in the
       future, if they are successful.

   2.  Extensions that are intended to never be standardized because
       they are intended only for implementation-specific use or for
       local use on private networks.

   Use of this naming convention is not mandated by the Internet
   Standards Process [<a href="#ref-BCP9" title=""The Internet Standards Process -- Revision 3"">BCP9</a>] or IANA registration rules [<a href="#ref-BCP26" title="">BCP26</a>].  Rather,
   it is an individual choice by each specification that references the
   convention or each administrative process that chooses to use it.  In
   particular, some Standards Track RFCs have interpreted the convention
   in a normative way (e.g., [<a href="./rfc822" title=""Standard for the format of ARPA Internet text messages"">RFC822</a>] and [<a href="./rfc5451" title=""Message Header Field for Indicating Message Authentication Status"">RFC5451</a>]).

<span class="h2"><a class="selflink" id="appendix-B" href="#appendix-B">Appendix B</a>.  Analysis</span>

   The primary problem with the "X-" convention is that unstandardized
   parameters have a tendency to leak into the protected space of
   standardized parameters, thus introducing the need for migration from
   the "X-" name to a standardized name.  Migration, in turn, introduces
   interoperability issues (and sometimes security issues) because older
   implementations will support only the "X-" name and newer
   implementations might support only the standardized name.  To
   preserve interoperability, newer implementations simply support the
   "X-" name forever, which means that the unstandardized name has
   become a de facto standard (thus obviating the need for segregation
   of the name space into standardized and unstandardized areas in the
   first place).

   We have already seen this phenomenon at work with regard to FTP in
   the quote from [<a href="./rfc1123" title=""Requirements for Internet Hosts - Application and Support"">RFC1123</a>] in <a href="#appendix-A">Appendix A</a>.  The HTTP community had the
   same experience with the "x-gzip" and "x-compress" media types, as
   noted in [<a href="./rfc2068" title=""Hypertext Transfer Protocol -- HTTP/1.1"">RFC2068</a>]:

      For compatibility with previous implementations of HTTP,
      applications should consider "x-gzip" and "x-compress" to be
      equivalent to "gzip" and "compress" respectively.





<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 7]</span>

<span id="page-8" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   A similar example can be found in [<a href="./rfc5064" title=""The Archived-At Message Header Field"">RFC5064</a>], which defined the
   "Archived-At" message header field but also found it necessary to
   define and register the "X-Archived-At" field:

      For backwards compatibility, this document also describes the
      X-Archived-At header field, a precursor of the Archived-At header
      field.  The X-Archived-At header field MAY also be parsed, but
      SHOULD NOT be generated.

   One of the original reasons for segregation of name spaces into
   standardized and unstandardized areas was the perceived difficulty of
   registering names.  However, the solution to that problem has been
   simpler registration rules, such as those provided by [<a href="./rfc3864" title=""Registration Procedures for Message Header Fields"">RFC3864</a>] and
   [<a href="./rfc4288" title=""Media Type Specifications and Registration Procedures"">RFC4288</a>].  As explained in [<a href="./rfc4288" title=""Media Type Specifications and Registration Procedures"">RFC4288</a>]:

      [W]ith the simplified registration procedures described above for
      vendor and personal trees, it should rarely, if ever, be necessary
      to use unregistered experimental types.  Therefore, use of both
      "x-" and "x." forms is discouraged.

   For some name spaces, another helpful practice has been the
   establishment of separate registries for permanent names and
   provisional names, as in [<a href="./rfc4395" title=""Guidelines and Registration Procedures for New URI Schemes"">RFC4395</a>].

   Furthermore, often standardization of a unstandardized parameter
   leads to subtly different behavior (e.g., the standardized version
   might have different security properties as a result of security
   review provided during the standardization process).  If implementers
   treat the old, unstandardized parameter and the new, standardized
   parameter as equivalent, interoperability and security problems can
   ensue.  Analysis of unstandardized parameters to detect and correct
   flaws is, in general, a good thing and is not intended to be
   discouraged by the lack of distinction in element names.  If an
   originally unstandardized parameter or protocol element is
   standardized and the new form has differences that affect
   interoperability or security properties, it would be inappropriate
   for implementations to treat the old form as identical to the new
   form.

   For similar considerations with regard to the "P-" convention in the
   Session Initiation Protocol, see [<a href="./rfc5727" title=""Change Process for the Session Initiation Protocol (SIP) and the Real- time Applications and Infrastructure Area"">RFC5727</a>].










<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 8]</span>

<span id="page-9" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   In some situations, segregating the parameter name space used in a
   given application protocol can be justified:

   1.  When it is extremely unlikely that some parameters will ever be
       standardized.  In this case, implementation-specific and private-
       use parameters could at least incorporate the organization's name
       (e.g., "ExampleInc-foo" or, consistent with [<a href="./rfc4288" title=""Media Type Specifications and Registration Procedures"">RFC4288</a>],
       "VND.ExampleInc.foo") or primary domain name (e.g.,
       "com.example.foo" or a Uniform Resource Identifier [<a href="./rfc3986" title=""Uniform Resource Identifier (URI): Generic Syntax"">RFC3986</a>] such
       as "http://example.com/foo").  In rare cases, truly experimental
       parameters could be given meaningless names such as nonsense
       words, the output of a hash function, or Universally Unique
       Identifiers (UUIDs) [<a href="./rfc4122" title=""A Universally Unique IDentifier (UUID) URN Namespace"">RFC4122</a>].

   2.  When parameter names might have significant meaning.  This case
       too is rare, since implementers can almost always find a synonym
       for an existing term (e.g., "urgency" instead of "priority") or
       simply invent a more creative name (e.g., "get-it-there-fast").
       The existence of multiple similarly named parameters can be
       confusing, but this is true regardless if there is an attempt to
       segregate standardized and unstandardized parameters (e.g.,
       "X-Priority" can be confused with "Urgency").

   3.  When parameter names need to be very short (e.g., as in [<a href="./rfc5646" title=""Tags for Identifying Languages"">RFC5646</a>]
       for language tags).  In this case, it can be more efficient to
       assign numbers instead of human-readable names (e.g., as in
       [<a href="./rfc2939" title=""Procedures and IANA Guidelines for Definition of New DHCP Options and Message Types"">RFC2939</a>] for DHCP options) and to leave a certain numeric range
       for implementation-specific extensions or private use (e.g., as
       with the codec numbers used with the Session Description Protocol
       [<a href="./rfc4566" title=""SDP: Session Description Protocol"">RFC4566</a>]).

   There are three primary objections to deprecating the "X-" convention
   as a best practice for application protocols:

   1.  Implementers might mistake one parameter for another parameter
       that has a similar name; a rigid distinction such as an "X-"
       prefix can make this clear.  However, in practice, implementers
       are forced to blur the distinction (e.g., by treating "X-foo" as
       a de facto standard), so it inevitably becomes meaningless.

   2.  Collisions are undesirable, and it would be bad for both a
       standardized parameter "foo" and a unstandardized parameter "foo"
       to exist simultaneously.  However, names are almost always cheap,
       so an experimental, implementation-specific, or private-use name
       of "foo" does not prevent a standards development organization
       from issuing a similarly creative name such as "bar".





<span class="grey">Saint-Andre, et al.       Best Current Practice                 [Page 9]</span>

<span id="page-10" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   3.  [<a href="#ref-BCP82" title=""Assigning Experimental and Testing Numbers Considered Useful"">BCP82</a>] is entitled "Assigning Experimental and Testing Numbers
       Considered Useful" and therefore implies that the "X-" prefix is
       also useful for experimental parameters.  However, <a href="https://www.rfc-editor.org/bcp/bcp82">BCP 82</a>
       addresses the need for protocol numbers when the pool of such
       numbers is strictly limited (e.g., DHCP options) or when a number
       is absolutely required even for purely experimental purposes
       (e.g., the Protocol field of the IP header).  In almost all
       application protocols that make use of protocol parameters
       (including email headers, media types, HTTP headers, vCard
       parameters and properties, URNs, and LDAP field names), the name
       space is not limited or constrained in any way, so there is no
       need to assign a block of names for private use or experimental
       purposes (see also [<a href="#ref-BCP26" title="">BCP26</a>]).

   Therefore, it appears that segregating the parameter space into a
   standardized area and a unstandardized area has few, if any, benefits
   and has at least one significant cost in terms of interoperability.

References

Normative References

   [<a id="ref-RFC2119">RFC2119</a>]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc2119">RFC 2119</a>, March 1997.

Informative References

   [<a id="ref-BCP9">BCP9</a>]     Bradner, S., "The Internet Standards Process -- Revision
              3", <a href="https://www.rfc-editor.org/bcp/bcp9">BCP 9</a>, <a href="./rfc2026">RFC 2026</a>, October 1996.

   [<a id="ref-BCP26">BCP26</a>]    Narten, T. and H. Alvestrand, "Guidelines for Writing an
              IANA Considerations Section in RFCs", <a href="https://www.rfc-editor.org/bcp/bcp26">BCP 26</a>, <a href="./rfc5226">RFC 5226</a>,
              May 2008.

   [<a id="ref-BCP82">BCP82</a>]    Narten, T., "Assigning Experimental and Testing Numbers
              Considered Useful", <a href="https://www.rfc-editor.org/bcp/bcp82">BCP 82</a>, <a href="./rfc3692">RFC 3692</a>, January 2004.

   [<a id="ref-RFC691">RFC691</a>]   Harvey, B., "One more try on the FTP", <a href="./rfc691">RFC 691</a>, June 1975.

   [<a id="ref-RFC737">RFC737</a>]   Harrenstien, K., "FTP extension: XSEN", <a href="./rfc737">RFC 737</a>,
              October 1977.

   [<a id="ref-RFC743">RFC743</a>]   Harrenstien, K., "FTP extension: XRSQ/XRCP", <a href="./rfc743">RFC 743</a>,
              December 1977.

   [<a id="ref-RFC775">RFC775</a>]   Mankins, D., Franklin, D., and A. Owen, "Directory
              oriented FTP commands", <a href="./rfc775">RFC 775</a>, December 1980.




<span class="grey">Saint-Andre, et al.       Best Current Practice                [Page 10]</span>

<span id="page-11" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   [<a id="ref-RFC822">RFC822</a>]   Crocker, D., "Standard for the format of ARPA Internet
              text messages", STD 11, <a href="./rfc822">RFC 822</a>, August 1982.

   [<a id="ref-RFC1123">RFC1123</a>]  Braden, R., "Requirements for Internet Hosts - Application
              and Support", STD 3, <a href="./rfc1123">RFC 1123</a>, October 1989.

   [<a id="ref-RFC1154">RFC1154</a>]  Robinson, D. and R. Ullmann, "Encoding header field for
              internet messages", <a href="./rfc1154">RFC 1154</a>, April 1990.

   [<a id="ref-RFC2045">RFC2045</a>]  Freed, N. and N. Borenstein, "Multipurpose Internet Mail
              Extensions (MIME) Part One: Format of Internet Message
              Bodies", <a href="./rfc2045">RFC 2045</a>, November 1996.

   [<a id="ref-RFC2046">RFC2046</a>]  Freed, N. and N. Borenstein, "Multipurpose Internet Mail
              Extensions (MIME) Part Two: Media Types", <a href="./rfc2046">RFC 2046</a>,
              November 1996.

   [<a id="ref-RFC2047">RFC2047</a>]  Moore, K., "MIME (Multipurpose Internet Mail Extensions)
              Part Three: Message Header Extensions for Non-ASCII Text",
              <a href="./rfc2047">RFC 2047</a>, November 1996.

   [<a id="ref-RFC2068">RFC2068</a>]  Fielding, R., Gettys, J., Mogul, J., Nielsen, H., and T.
              Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1",
              <a href="./rfc2068">RFC 2068</a>, January 1997.

   [<a id="ref-RFC2426">RFC2426</a>]  Dawson, F. and T. Howes, "vCard MIME Directory Profile",
              <a href="./rfc2426">RFC 2426</a>, September 1998.

   [<a id="ref-RFC2616">RFC2616</a>]  Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
              Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
              Transfer Protocol -- HTTP/1.1", <a href="./rfc2616">RFC 2616</a>, June 1999.

   [<a id="ref-RFC2822">RFC2822</a>]  Resnick, P., "Internet Message Format", <a href="./rfc2822">RFC 2822</a>,
              April 2001.

   [<a id="ref-RFC2939">RFC2939</a>]  Droms, R., "Procedures and IANA Guidelines for Definition
              of New DHCP Options and Message Types", <a href="https://www.rfc-editor.org/bcp/bcp43">BCP 43</a>, <a href="./rfc2939">RFC 2939</a>,
              September 2000.

   [<a id="ref-RFC3406">RFC3406</a>]  Daigle, L., van Gulik, D., Iannella, R., and P. Faltstrom,
              "Uniform Resource Names (URN) Namespace Definition
              Mechanisms", <a href="https://www.rfc-editor.org/bcp/bcp66">BCP 66</a>, <a href="./rfc3406">RFC 3406</a>, October 2002.

   [<a id="ref-RFC3427">RFC3427</a>]  Mankin, A., Bradner, S., Mahy, R., Willis, D., Ott, J.,
              and B. Rosen, "Change Process for the Session Initiation
              Protocol (SIP)", <a href="./rfc3427">RFC 3427</a>, December 2002.





<span class="grey">Saint-Andre, et al.       Best Current Practice                [Page 11]</span>

<span id="page-12" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


   [<a id="ref-RFC3864">RFC3864</a>]  Klyne, G., Nottingham, M., and J. Mogul, "Registration
              Procedures for Message Header Fields", <a href="https://www.rfc-editor.org/bcp/bcp90">BCP 90</a>, <a href="./rfc3864">RFC 3864</a>,
              September 2004.

   [<a id="ref-RFC3986">RFC3986</a>]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66,
              <a href="./rfc3986">RFC 3986</a>, January 2005.

   [<a id="ref-RFC4122">RFC4122</a>]  Leach, P., Mealling, M., and R. Salz, "A Universally
              Unique IDentifier (UUID) URN Namespace", <a href="./rfc4122">RFC 4122</a>,
              July 2005.

   [<a id="ref-RFC4288">RFC4288</a>]  Freed, N. and J. Klensin, "Media Type Specifications and
              Registration Procedures", <a href="https://www.rfc-editor.org/bcp/bcp13">BCP 13</a>, <a href="./rfc4288">RFC 4288</a>, December 2005.

   [<a id="ref-RFC4395">RFC4395</a>]  Hansen, T., Hardie, T., and L. Masinter, "Guidelines and
              Registration Procedures for New URI Schemes", <a href="https://www.rfc-editor.org/bcp/bcp35">BCP 35</a>,
              <a href="./rfc4395">RFC 4395</a>, February 2006.

   [<a id="ref-RFC4512">RFC4512</a>]  Zeilenga, K., "Lightweight Directory Access Protocol
              (LDAP): Directory Information Models", <a href="./rfc4512">RFC 4512</a>,
              June 2006.

   [<a id="ref-RFC4566">RFC4566</a>]  Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
              Description Protocol", <a href="./rfc4566">RFC 4566</a>, July 2006.

   [<a id="ref-RFC5064">RFC5064</a>]  Duerst, M., "The Archived-At Message Header Field",
              <a href="./rfc5064">RFC 5064</a>, December 2007.

   [<a id="ref-RFC5451">RFC5451</a>]  Kucherawy, M., "Message Header Field for Indicating
              Message Authentication Status", <a href="./rfc5451">RFC 5451</a>, April 2009.

   [<a id="ref-RFC5545">RFC5545</a>]  Desruisseaux, B., "Internet Calendaring and Scheduling
              Core Object Specification (iCalendar)", <a href="./rfc5545">RFC 5545</a>,
              September 2009.

   [<a id="ref-RFC5646">RFC5646</a>]  Phillips, A. and M. Davis, "Tags for Identifying
              Languages", <a href="https://www.rfc-editor.org/bcp/bcp47">BCP 47</a>, <a href="./rfc5646">RFC 5646</a>, September 2009.

   [<a id="ref-RFC5727">RFC5727</a>]  Peterson, J., Jennings, C., and R. Sparks, "Change Process
              for the Session Initiation Protocol (SIP) and the Real-
              time Applications and Infrastructure Area", <a href="https://www.rfc-editor.org/bcp/bcp67">BCP 67</a>,
              <a href="./rfc5727">RFC 5727</a>, March 2010.








<span class="grey">Saint-Andre, et al.       Best Current Practice                [Page 12]</span>

<span id="page-13" ></span>
<span class="grey"><a href="./rfc6648">RFC 6648</a>                    Deprecating "X-"                   June 2012</span>


Authors' Addresses

   Peter Saint-Andre
   Cisco Systems, Inc.
   1899 Wynkoop Street, Suite 600
   Denver, CO  80202
   USA

   Phone: +1-303-308-3282
   EMail: [email protected]


   Dave Crocker
   Brandenburg InternetWorking
   675 Spruce Dr.
   Sunnyvale, CA
   USA

   Phone: +1.408.246.8253
   EMail: [email protected]
   URI:   <a href="http://bbiw.net">http://bbiw.net</a>


   Mark Nottingham
   Rackspace

   EMail: [email protected]
   URI:   <a href="http://www.mnot.net">http://www.mnot.net</a>























Saint-Andre, et al.       Best Current Practice                [Page 13]

Additional Resources