<?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.7 (Ruby 3.1.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-joshco-wpadng-01" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title abbrev="wpadng">Web Proxy Auto Discovery Next Generation</title>
    <seriesInfo name="Internet-Draft" value="draft-joshco-wpadng-01"/>
    <author initials="J." surname="Cohen" fullname="Josh Cohen">
      <organization>Self</organization>
      <address>
        <email>joshco@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="08"/>
    <area>General</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 28?>

<t>This specification aims to modernize Web Proxy Automatic Discovery (<xref target="WPAD"/>) which was defined in 1997.  At that time, the World Wide Web was much
earlier in its evolution. This specification provides more modern discovery mechanisms and incorporates <xref target="PVD"/></t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/joshco/wpadng"/>.</t>
    </note>
  </front>
  <middle>
    <?line 34?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Web Proxy Automatic Discovery Next Generation (WPADNG) defines a mechanism for Web Browsers, applications, or operating system services to discover nearby Web Proxy Severs.</t>
      <t>The Web Proxy Auto-Discovery (WPADNG) problem reduces to
providing the web client a mechanism for discovering the URL of the Configuration File (CFILE). Once this Configuration File URL (CURL) is known, the client software already contains mechanisms for retrieving and interpreting the CFILE to enable access to the
specified proxy cache servers.</t>
      <t>The goal of the wpadng process is to discover the correct CURL at which to retrieve the CFILE. The client
is <em>not</em> trying to directly discover the name of the proxy server.
That would circumvent the additional capabilities provided by proxy
Configuration Files (such as load balancing, request routing to an
array of servers, automated fail-over to backup proxy server.)</t>
      <t>Different clients requesting the CURL may
receive completely different CFILEs in response. The web server may
send back different CFILES based on a number of criteria such as the
"User-Agent" header, "Accept" headers, client IP address/subnet,
etc.  The same client could conceivably receive a different CFILE on
successive retrievals (as a method of round-robin load balancing,
for example).</t>
      <t>This document will discuss a set of mechanisms for discovering the
Configuration URL. The client will attempt them in a predefined
order, until one succeeds.</t>
    </section>
    <section anchor="curls-and-urns">
      <name>CURLs and URNs</name>
      <t>When a CURL is returned by discovery, it <bcp14>SHOULD</bcp14> be either a URL which is retrievable or a URN.</t>
      <t>This specification defines the following URN for use with WPADNG.</t>
      <t><tt>urn:wpadng:none</tt></t>
      <t>When this URN is returned as the CURL, the meaning is that the current network has no proxy server, and the client <bcp14>SHOULD</bcp14> stop any further discovery.  This can be helpful in avoiding unnecessary network round trips and  preventing discovery of rogue proxy servers.</t>
    </section>
    <section anchor="the-discovery-process">
      <name>The Discovery Process</name>
      <section anchor="wpadng-overview">
        <name>WPADNG Overview</name>
        <t>WPADNG uses a collection of pre-existing Internet resource discovery mechanisms to perform web proxy auto-discovery.  The WPADNG protocol specifies the following:</t>
        <ul spacing="normal">
          <li>
            <t>how to use each mechanism for the specific purpose of web proxy
  auto-discovery</t>
          </li>
          <li>
            <t>the order in which the mechanisms should be performed</t>
          </li>
          <li>
            <t>the minimal set of mechanisms which must be attempted by a WPADNG
  compliant web client</t>
          </li>
        </ul>
        <t>The resource discovery mechanisms utilized by WPADNG, in order, are as follows.</t>
        <ul spacing="normal">
          <li>
            <t>Dynamic Host Configuration Protocol v4 or v6 depending on network.</t>
          </li>
          <li>
            <t>DNS-SD</t>
          </li>
        </ul>
        <t>Clients only attempt mechanisms that they support. Each
time the discovery attempt succeeds; the client uses the information
obtained to construct a CURL. If the CURL is the URN <tt>urn:wpadng:none</tt> or if a CFILE is successfully retrieved, the process is complete.</t>
        <t>If not, the client resumes where it left of in the predefined series of resource discovery requests. If no untried mechanisms remain and a CFILE has not been successfully retrieved, the WPADNG protocol fails and the client is configured to use no proxy server.</t>
        <t>First the client tries DHCP, followed by DNSSD. If no CFILE has been
retrieved the client will retry the DNSSD mechanism multiple times. Each time through the QNAME being
used in the DNSSD query is made less and less specific. In this manner
the client can locate the most specific configuration information
possible, but can fall back on less specific information. Every DNSSD
lookup has the QNAME prefixed with “_wpadng._tcp” to indicate the resource type being requested.</t>
        <t>As an example, consider a client with hostname johns-
desktop.development.example.com. Assume the web client software supports all of the mechanisms listed above. This is the sequence of
discovery attempts the client would perform until one succeeded in
locating a valid CFILE:</t>
        <ul spacing="normal">
          <li>
            <t>DNSSD PTR lookup on QNAME=_wpadng._tcp.development.example.com.</t>
          </li>
          <li>
            <t>DNSSD PTR lookup on QNAME=_wpadng._tcp.example.com.</t>
          </li>
        </ul>
      </section>
      <section anchor="when-to-execute-wpadng">
        <name>When to Execute WPADNG</name>
        <t>Web clients need to perform the WPADNG protocol periodically to
maintain correct proxy settings. This should occur on a regular
basis corresponding to initialization of the client software or the
networking stack below the client. As well, WPADNG will need to occur
in response to expiration of existing configuration data.  The
following sections describe the details of these scenarios.</t>
        <section anchor="periodic-discovery">
          <name>Periodic Discovery</name>
          <t>The web proxy auto-discovery process <bcp14>MUST</bcp14> occur at least as
frequently as one of the following two options. A web client can use
either option depending on which makes sense in their environment.
Clients <bcp14>MUST</bcp14> use at least one of the following options. They <bcp14>MAY</bcp14>
also choose to implement both options.
- Upon startup of the web client.
- Whenever there indication from the networking stack that the  IP
address of the client host either has, or could have, changed.</t>
          <t>In addition, the client <bcp14>MUST</bcp14> attempt a discovery cycle upon
expiration of a previously downloaded CFILE in accordance with
HTTP/1.1.</t>
        </section>
        <section anchor="upon-startup-of-the-web-client">
          <name>Upon Startup of the Web Client</name>
          <t>For many types of web client (like web browsers) there can be many
instances of the client operating for a given user at one time. This
is often to allow display of multiple web pages in different
windows, for example. There is no need to re-perform WPADNG every time
a new instance of the web client is opened. WPADNG <bcp14>MUST</bcp14> be performed
when the number of web client instances transitions from 0 to 1. It
<bcp14>SHOULD NOT</bcp14> be performed as additional instances are created.</t>
        </section>
        <section anchor="network-stack-events">
          <name>Network Stack Events</name>
          <t>Another option for clients is to tie the execution of WPADNG to
changes in the networking environment. If the client can learn about
the change of the local host’s IP address, or the possible change of
the IP address, it <bcp14>MUST</bcp14> re-perform the WPADNG protocol.  Many
operating systems provide indications of “network up” events, for
example. Those types of events and system-boot events might be the
triggers for WPADNG in many environments.</t>
        </section>
        <section anchor="expiration-of-the-cfile">
          <name>Expiration of the CFILE</name>
          <t>The HTTP retrieval of the CURL may return HTTP headers specifying a
valid lifetime for the CFILE returned. The client <bcp14>MUST</bcp14> obey these
timeouts and rerun the PAD process when it expires. A client <bcp14>MAY</bcp14>
rerun the WPADNG process if it detects a failure of the currently
configured proxy (which is not otherwise recoverable via the
inherent mechanisms provided by the currently active Configuration
File).</t>
          <t>Whenever the client decides to invalidate the current CURL or CFILE,
it <bcp14>MUST</bcp14> rerun the entire WPADNG protocol to ensure it discovers the
currently correct CURL. Specifically, if the valid lifetime of the
CFILE ends(as specified by the HTTP headers provided when it was
retrieved),the complete WPADNG protocol <bcp14>MUST</bcp14> be rerun. The client <bcp14>MUST
NOT</bcp14> simply re-use the existing CURL to obtain a fresh copy of the
CFILE.</t>
          <t>A number of network round trips, broadcast and/or multicast
communications may be required during the WPADNG protocol. The WPADNG
protocol <bcp14>SHOULD NOT</bcp14> be invoked at a more frequent rate than
specified above (such as per-URL retrieval).</t>
        </section>
      </section>
      <section anchor="discovery-mechanisms">
        <name>Discovery Mechanisms</name>
        <t>Each of the resource discovery methods will be marked as to whether
the client <bcp14>MUST</bcp14>, <bcp14>SHOULD</bcp14>, <bcp14>MAY</bcp14>, or <bcp14>MUST NOT</bcp14> implement them to be
compliant. Client implementers are encouraged to implement as many
mechanisms as possible, to promote maximum interoperability.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Discovery Mechanism</th>
              <th align="left">Status</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">DHCP</td>
              <td align="left">
                <bcp14>MUST</bcp14></td>
            </tr>
            <tr>
              <td align="left">DNS-SD</td>
              <td align="left">
                <bcp14>MUST</bcp14></td>
            </tr>
          </tbody>
        </table>
        <section anchor="dns-serice-discovery-dns-sd">
          <name>DNS Serice Discovery (DNS-SD)</name>
          <t>Client implementations <bcp14>MUST</bcp14> support <xref target="DNSSD"/> discovery of
proxy configuration files.  To suport this, a DNS server advertising
WPADNG will have the following resource records:</t>
          <t><bcp14>SHOULD</bcp14> advertise PTR records which may return multiple advertised service instances
or a single instance.</t>
          <t><bcp14>MUST</bcp14> advertise TXT records conformant with <xref target="DNSSD"/></t>
          <t><bcp14>SHOULD</bcp14> advertise SRV records conformant with <xref target="DNSSD"/></t>
          <section anchor="ptr-record-definition">
            <name>PTR Record Definition</name>
            <t>For example purposes, we assume a client has attached to the
enterprise network at Example Coporation, which uses the dommain <tt>example.org</tt></t>
            <t>WPADNG PTR records should have the following naming scheme:</t>
            <artwork><![CDATA[
_wpadng._tcp.example.org
]]></artwork>
            <t>When a client queries for the PTR record, the DNS server replies
will contain zero, one or more responses.  These responses contain WPADNG
instance names, and priorities.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Instance Name</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">primary._wpadng._tcp.example.org</td>
                </tr>
                <tr>
                  <td align="left">secondary._wpadng._tcp.example.org</td>
                </tr>
                <tr>
                  <td align="left">_wpadng._tcp.example.org</td>
                </tr>
              </tbody>
            </table>
            <t>In the above example. the enterprise advertises instance names for proxy servers
This allows an enterprise to provide redundancy and failover.</t>
          </section>
          <section anchor="txt-record-definition">
            <name>TXT Record Definition</name>
            <t>WPADNG DNS TXT records <bcp14>MUST</bcp14> have the following format</t>
            <artwork><![CDATA[
txtvers=1
url=CURL
]]></artwork>
            <t>The CURL value is a URN or the URL to retrieve a Proxy Configuration File.</t>
          </section>
          <section anchor="dnssd-client-behavior">
            <name>DNSSD Client behavior</name>
            <t>When attempting to discover web proxy servers via <xref target="DNSSD"/>, the following sequence should be used:</t>
            <ol spacing="normal" type="1"><li>
                <t>Query PTR records</t>
              </li>
              <li>
                <t>Query TXT records</t>
              </li>
              <li>
                <t>Compose Candidate URL</t>
              </li>
              <li>
                <t>Retreive configuration file</t>
              </li>
            </ol>
          </section>
        </section>
        <section anchor="dhcp-v4">
          <name>DHCP v4</name>
          <t>Client implementations <bcp14>MUST</bcp14> support DHCP. DHCP has widespread
support in numerous vendor hardware and software implementations, and
is widely deployed. It is also perfectly suited to this task, and is
used to discover other network resources (such a time servers,
printers, etc). The DHCP protocol is detailed in <xref target="DHCP"/>.
We propose a new DHCP option with code 252 for use in web proxy
auto-discovery. See <xref target="DHCPOPT"/> for a list of existing DHCP
options.</t>
          <t>The client should obtain the value of the DHCP option code 252 as
returned by the DHCP server. If the client has already conducted
DHCP protocol during its initialization, the DHCP server may already
have supplied that value. If the value is not available through a
client OS API, the client <bcp14>SHOULD</bcp14> use a DHCPINFORM message to query
the DHCP server to obtain the value.</t>
          <t>The DHCP option code for WPAD is 252 by agreement of the DHC working
group chair.  This option is of type STRING.  This string contains a
URL which points to an appropriate config file.  The STRING is of
arbitrary size.</t>
          <t>Example values:</t>
          <artwork><![CDATA[
http://server.domain/proxyconfig.pac
urn:wpadng:none
]]></artwork>
        </section>
        <section anchor="dhcp-v6-tbd">
          <name>DHCP v6 (TBD)</name>
        </section>
        <section anchor="timeouts">
          <name>Timeouts</name>
          <t>Implementers are encouraged to limit the time elapsed in each
discovery phase.  When possible, limiting each phase to 10 seconds
is considered reasonable.  Implementers may choose a different value
which is more appropriate to their network properties.  For example,
a device implementation, which operated over a wireless network, may
use a much larger timeout to account for low bandwidth or high
latency.</t>
        </section>
      </section>
      <section anchor="retrieving-the-cfile-at-the-curl">
        <name>Retrieving the CFILE at the CURL</name>
        <t>The client then requests the CURL via HTTP.</t>
        <section anchor="content-negotiation-for-pvd">
          <name>Content Negotiation for PVD</name>
          <t>When making the request it <bcp14>MUST</bcp14> transmit HTTP "Accept" headers
indicating what CFILE formats it is capable of accepting.</t>
          <t>For PVD, the Accept header value is <tt>application/pvd_json</tt></t>
          <t>For existing WPAD clients, the most commonly used format is Netscape's
Proxy Auto Config (PAC) file, the value is 'application/x-ns-proxy-autoconfig'</t>
          <t>Clients that support PVD can use content negotiation to prefer PVD,
while accepting PAC as a fallback.</t>
          <artwork><![CDATA[
:method = GET
:authority = HOST
:path = PATH
accept = application/pvd+json
accept = application/x-ns-proxy-autoconfig
]]></artwork>
          <t>Clients that do not support PVD will continue to use PAC, and not include
PVD in the accept header.</t>
          <t>When receiving a GET at the CURL, a proxy server can decide wether to return
PVD or PAC, providing backward compatibility as well as an upgrade path.</t>
          <t>The client <bcp14>MUST</bcp14> follow HTTP redirect directives (response codes 3xx)
returned by the server. The client <bcp14>SHOULD</bcp14> send a valid "User-Agent"
header.</t>
        </section>
      </section>
      <section anchor="resuming-discovery">
        <name>Resuming Discovery</name>
        <t>If the HTTP request fails for any reason (fails to connect, server
error response, etc) the client <bcp14>MUST</bcp14> resume the search for a
successful CURL where it left off. It should continue attempting
other sub-steps in a specific discovery mechanism, and then move on
to the next mechanism or TGTDOM iteration, etc.</t>
      </section>
    </section>
    <section anchor="proxy-server-considerations">
      <name>Proxy Server Considerations</name>
      <t>As mentioned in the previous section, it is suggested that proxy
servers be capable of acting as a web server, so that they can host
the CURL directly.</t>
      <t>The implementers of proxy servers are most likely to understand the
deployment situations of proxy caches, the formats of proxy
configuration files, etc. They can also build in the ability select
a CFILE based on all the various inputs at the time of the CURL
request("User-Agent", "Accept", client IP address/subnet/hostname,
topological distribution of nearby proxy servers, etc).</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document does not address security of the protocols involved.
The WPAD protocol is vulnerable to existing identified weaknesses in
DHCP and DNS. The groups driving those standards, as well as the SLP
protocol standards, are addressing security.</t>
      <t>When using DHCP discovery, clients are encouraged to use unicast
DHCP INFORM queries instead of broadcast queries which are more
easily spoofed in insecure networks.</t>
      <t>Minimally, it can be said that the WPAD protocol does not create new
security weaknesses.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="dhcpv6-option-code">
        <name>DHCPv6 Option Code</name>
        <t>This document requests a new DHCPv6 Option.</t>
      </section>
      <section anchor="dhcpv4-option-code">
        <name>DHCPv4 Option Code</name>
        <t>This document seeks to register DHCPv4 option code 252.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="WPAD">
        <front>
          <title>Web Proxy Auto-Discovery Protocol</title>
          <author fullname="Charles E. Perkins" initials="C. E." surname="Perkins">
            <organization>Sun Microsystems</organization>
          </author>
          <author fullname="Josh Cohen" initials="J." surname="Cohen">
            <organization>Microsoft Corporation</organization>
          </author>
          <author fullname="Martin Dunsmuir" initials="M." surname="Dunsmuir">
            <organization>RealNetworks, Inc.</organization>
          </author>
          <author fullname="Paul A. Gauthier" initials="P. A." surname="Gauthier">
            <organization>Inktomi Corporation</organization>
          </author>
          <author fullname="Ian Cooper" initials="I." surname="Cooper">
         </author>
          <author fullname="John W. Cohen M.A." initials="J. W. C." surname="M.A.">
         </author>
          <date day="29" month="July" year="1999"/>
          <abstract>
            <t>A mechanism is needed to permit web clients to locate nearby web 
proxy caches. Current best practice is for end users to hand 
configure their web client (i.e., browser) with the URL of an 'auto 
configuration file'. In large environments this presents a 
formidable support problem.  It would be much more manageable for 
the web client software to automatically learn the configuration 
information for its web proxy settings. This is typically referred 
to as a resource discovery problem.
            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-wrec-wpad-01"/>
      </reference>
      <reference anchor="PVD">
        <front>
          <title>Web Proxy Auto-Discovery Protocol</title>
          <author fullname="Charles E. Perkins" initials="C. E." surname="Perkins">
            <organization>Sun Microsystems</organization>
          </author>
          <author fullname="Josh Cohen" initials="J." surname="Cohen">
            <organization>Microsoft Corporation</organization>
          </author>
          <author fullname="Martin Dunsmuir" initials="M." surname="Dunsmuir">
            <organization>RealNetworks, Inc.</organization>
          </author>
          <author fullname="Paul A. Gauthier" initials="P. A." surname="Gauthier">
            <organization>Inktomi Corporation</organization>
          </author>
          <author fullname="Ian Cooper" initials="I." surname="Cooper">
         </author>
          <author fullname="John W. Cohen M.A." initials="J. W. C." surname="M.A.">
         </author>
          <date day="29" month="July" year="1999"/>
          <abstract>
            <t>A mechanism is needed to permit web clients to locate nearby web 
proxy caches. Current best practice is for end users to hand 
configure their web client (i.e., browser) with the URL of an 'auto 
configuration file'. In large environments this presents a 
formidable support problem.  It would be much more manageable for 
the web client software to automatically learn the configuration 
information for its web proxy settings. This is typically referred 
to as a resource discovery problem.
            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-wrec-wpad-01"/>
      </reference>
      <reference anchor="DNSSD">
        <front>
          <title>DNS-Based Service Discovery</title>
          <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
          <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
          <date month="February" year="2013"/>
          <abstract>
            <t>This document specifies how DNS resource records are named and structured to facilitate service discovery. Given a type of service that a client is looking for, and a domain in which the client is looking for that service, this mechanism allows clients to discover a list of named instances of that desired service, using standard DNS queries. This mechanism is referred to as DNS-based Service Discovery, or DNS-SD.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6763"/>
        <seriesInfo name="DOI" value="10.17487/RFC6763"/>
      </reference>
      <reference anchor="DHCP">
        <front>
          <title>Dynamic Host Configuration Protocol</title>
          <author fullname="R. Droms" initials="R." surname="Droms"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>The Dynamic Host Configuration Protocol (DHCP) provides a framework for passing configuration information to hosts on a TCPIP network. DHCP is based on the Bootstrap Protocol (BOOTP), adding the capability of automatic allocation of reusable network addresses and additional configuration options. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2131"/>
        <seriesInfo name="DOI" value="10.17487/RFC2131"/>
      </reference>
      <reference anchor="DHCPOPT">
        <front>
          <title>DHCP Options and BOOTP Vendor Extensions</title>
          <author fullname="S. Alexander" initials="S." surname="Alexander"/>
          <author fullname="R. Droms" initials="R." surname="Droms"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>This document specifies the current set of DHCP options. Future options will be specified in separate RFCs. The current list of valid options is also available in ftp://ftp.isi.edu/in-notes/iana/assignments. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2132"/>
        <seriesInfo name="DOI" value="10.17487/RFC2132"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 397?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <section anchor="acknowledgements-for-current-versions">
        <name>Acknowledgements for current versions</name>
        <t>The editor(s) of this specification would like acknowledge the contributions
of the previous authors.</t>
        <t>Paul Gauthier
   Inktomi Corporation</t>
        <t>Martin Dunsmuir
   RealNetworks, Inc.</t>
        <t>Charles Perkins
   Sun Microsystems, Inc.</t>
      </section>
      <section anchor="acknowledgements-from-previous-versions">
        <name>Acknowledgements from previous versions</name>
        <t>The authors' work on this specification would be incomplete without
the assistance of many people.  Specifically, the authors would like
the express their gratitude to the following people:</t>
        <t>Chuck Neerdaels, Inktomi, for providing assistance in the design of
the WPADNG protocol as well as for providing reference
implementations.</t>
        <t>Arthur Bierer, Darren Mitchell, Sean Edmison, Mario Rodriguez, Danpo
Zhang, and Yaron Goland, Microsoft, for providing implementation
insights as well as testing and deployment.</t>
        <t>Ari Luotonen, Netscape, for his role in designing the first web
proxy.</t>
        <t>In addition, the authors are grateful for the feedback provided by
the following people:</t>
        <ul spacing="normal">
          <li>
            <t>Jeremy Worley - RealNetworks</t>
          </li>
          <li>
            <t>Eric Twitchell - United Parcel Service</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA41b63Ibx5X+30/RK/+w6AUgU9Y6MTdKliYpiS6RYkgqXm8q
ZTdmGkCHg+nJ9AxB2FYqr7FVu1X7LPsoeZL9zjndcwFobfRDRQy6e06fy3eu
mE6nqnFNYY/0k2/tXF/V/mGrj9vG61MXMn9v662+tA+Nfm1LW5vG+fKJMvN5
be+xZVOZvFw+UbnPSrPGIXltFs30zz6sMj+Vb6efH6rMNHbp6+2RduXCK+Wq
+kg3dRua559//tXnz5WprTmK7yjUnd1ufJ0f6fOysXVpm+kpnatCg2VrOiS3
lcV/ZaPw0JT596bwJd6/tUGFtamb7//S+saGI116Vbkj/cfGZxMdfI0jFgF/
bdf0x5+UMm2z8vWR0lOl8c+V2PTNTJ/4lS35idzsG9xp8NDXS1O6H5khR/rG
Fgt+bNfGFUdaGPBvS/o0y/xaqdLXayy+t0e4PXjQf1LT6VSbOe5mMlznduWC
DpXN3MJlfLw2bh00JLL2ObjhfrR6LCo6KhvI6+lPP/3Tt1fHpy/Pp6czZ5vF
dFPbjMUBYXz4cKA3K5et9MYEnduFK22Oa+vDr7761Uzr40Y3K4P/3NpO8Cfe
5usi19+6XF5M29ZttlLW1IWzNe11TdD23hctETzTj1yiqv09TsBWX9t4FZ13
NK9ttgJDA24KceLIzNeVh8JhB65z9Qe5jehXZdpiO3VlQ2ozrYgR08yXC7ec
Vve44/MPHyJf1y7PC6vUJ6RKtc/bjIhR6uMM3FF4/ZS4efn6IHILJPb0asiS
2fJ17TfB1tAtU1VFvDY+4Wtf8UnlEmoXGrvWWHfvMstSTTzQJfg53w5ke2Px
OMxIJ3ZFPh1IOxEHPswLHF5bXJPPVsJ0ejHJcYMjMkisbPYukIhIS99fv9V+
wX+eMGPbyIpXrrD66cmr87dnBzP9rswsFkHYj6yiM56e4P8DjQV3pd+Uok+R
huAXzQYS1KaAGPOthggbA/sbKgMRV9umdvaeaBPdAChUeJiIZWqIlbY04IA2
Ga7PvMW3KqohdJwVRWcmwx6SQM/cpTdFuq+gFi3mU9xYSEy/r2FPjaa7aViK
WBNWRUJtTxWZQrqwwlGflb75DMi3ZdrpXDqp2I5fQIiTyBGihdwZiKX3+Rb2
mLk6a9f3xElaZ/LcEe9xkcxUZu4KfIQWRLvLNVSLz1L7ogr6aYBBaxh24Q2W
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
uR3E9X9ZWfOt3D0AAA==

-->

</rfc>
