<?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-02" 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-02"/>
    <author initials="J." surname="Cohen" fullname="Josh Cohen">
      <organization>Self</organization>
      <address>
        <email>joshco@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <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>
      <section anchor="no-proxy">
        <name>No Proxy</name>
        <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="domain-redirect">
        <name>Domain Redirect</name>
        <t>This document removes DNS Devolution, where the client tries DNSSD discovery repeatedly moving up the DNS hierachy by removing subdomains.</t>
        <t>Instead, this document specifies a URN that allows redirection to another DNS domain, which is specified in the URN's r-component.</t>
        <t><tt>urn:wpadng:domain?+&lt;ANOTHER_DOMAIN&gt;</tt></t>
        <t>For example, if the client's domain is <tt>development.example.com</tt> and the enterprise specifies it's CURL at <tt>example.com</tt>, the returned URN would be:</t>
        <t><tt>urn:wpadng:domain?+example.com</tt></t>
      </section>
    </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.</t>
        <t>When performing DNSSD discovery, the client might receive a CURL, the URN for No Proxy, the URN for Domain Redirect, or no CURL.</t>
        <t>If the client receives the Domain Redirect URN, then it should retry DNSSD discovery on the domain specified in the URN r-component.</t>
      </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>Communicating Proxy Configurations in Provisioning Domains</title>
          <author fullname="Tommy Pauly" initials="T." surname="Pauly">
            <organization>Apple, Inc.</organization>
          </author>
          <author fullname="Dragana Damjanovic" initials="D." surname="Damjanovic">
            <organization>Microsoft</organization>
          </author>
          <date day="1" month="March" year="2024"/>
          <abstract>
            <t>   This document defines a mechanism for accessing provisioning domain
   information associated with a proxy, such as other proxy URIs that
   support different protocols and a list of DNS zones that are
   accessible via a proxy.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tfpauly/privacy-proxy.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-pauly-intarea-proxy-config-pvd-02"/>
      </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 403?>

<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:
H4sIAAAAAAAAA41b7XIjt5X9j6fAjn9YckiONZ51Ym2crCzJM0qNPiJp4vWm
tjzNbpBE1Gx0Gt3i0M6k8hpbtVu1z7KPkifZc+8F0N2kPJv5MSU2AfTFxcW5
535wOp2q1ralOdbPvjNzfdO491t90rVOn1mfu0fTbPWVed/qV6YyTdZaVz1T
2XzemEdM2dRZUS2fqcLlVbbGIkWTLdrpn5xf5W4q304/f6HyrDVL12yPta0W
TilbN8e6bTrfvvj8868wIGtMdhzeUaoHs924pjjWF1Vrmsq00zNaV/kWw9a0
SGFqg/+qVuFhVhU/ZKWr8P6t8cqvs6b94c+da40/1pVTtT3Wf2xdPtHeNVhi
4fHXdk1//IdSWdeuXHOs9FRp/LMVJv1upk/dylT8RHb2O+xp8NA1y6yyP7JC
jvWdKRf82KwzWx5rUcC/LunTLHdrpSrXrDH40Rxj99BB/0lNp1OdzbG3LMd2
7lfWa1+b3C5szsvrzK69xomsXQFt2B+NHh8VLZUPzuvgp5/+6bubk7OvL6Zn
M2vaxXTTmJyPY/r50YcPh3qzsvlKbzKvC7OwlSmwbX301Ve/nGl90up2leE/
uzYT/Im3uaYs9He2kBfTtHWXr5TJmtKahuba1mvz6MqOBJ7pJzZRN+4RK2Cq
a0zYii6SzGuTr6BQj53iOLFk7praweAwA9u5+YPsRuyrzrpyO7VVS2YzrUkR
09xVC7uc1o/Y44sPH4Je17YoSqPUJ2RKjSu6nIRR6uMK3DF4fUDavHp1GLQF
EXt5Nc6S1fJN4zbeNLCtrK7LsG18wteu5pWqJczOt2atMe7R5oZPNepAV9Dn
fDs42zuDx35GNrF75NPBaUfhoId5icUbg23y2kqUTi+mc9xgiRwnVrV7G4hC
xKFvb99ot+A/T1mxXVDFt7Y0+uD024s354czfV3lBoNw2E+MojUOTvH/ocaA
h8ptKrGnIIN3i3aDE9RZiWMsthpH2Ga4f0NjIOEa0zbWPJJsYhsAhRoPo7As
DanSVBk0oLMc22fd4lsVzBA2zoai8yzHHDqBXrlLl5Vxv4JaNJhXseNDYvld
g/vUatqbxk2R24RRQVDTS0VXIW5YYanPKtd+BuTbsuy0Lq1UbscvIMSJ4ojQ
Iu4MwtL7XIf7mNsm79aPpEkalxWFJd1jI3lWZ3Nb4iOsINy7QsO0eC21f1Re
H3hcaI2LXboMQ7Myq3KIOMGW/twZ3+rGdW2QOasA1022JQmDGmHzco3wngUw
bypbcVgpf+jq8SYOcTfP7GJhGpJddOPji9KZkm7X2VZBPwZACaWv69K0hnUV
J7OOPQFQY3yN62ZE4WTp8jZew8NXsCi7U+/w1ENmAllddes5JmBXeWNhYjbT
UStkR8/eYsXpyRKTn+kVDNY0E/3sBLZWpwdQRDDuixs6EUjln/tuDhc2UabN
Aa8knqfzDQNzOUxX0TZhvlsdd5ztSgsxFSQis6Tvg7VlJY4vE0yCJytoAzit
qpgCD6CZnRNVdKPM+4y0eTgL/gb+u1vTeza2LNkWO08retPScjv3cQcsdgwK
Bze0elkyawF7NVvqmo4rg0mY4HsUXD3psqtai1tYGc2bNAXdzk/YEsQpvL29
8oBuuGDMZwOxZDdt11Ri38mdTOCQ9N3r67dvzvTcaGPx3gaTaI7cVpnJ+iPI
cPLt1exJBxxhnwxz4crSbWjrGM7q6DwMDm/QAsQk9Cf6yglaK/UO4h0LqBxX
2N27sAWGTVpjuAmxNd6cYOXaQPF4GcEQe2VSbNewUcCqQJMe9AqzKje6ZBNW
2ABsgzJ862p8tdWLrmGdJJWxaeIteVaRylamrBddyWf16MSHdFVlyPgyeJ34
brY0AJqt5YzoXAmTaHzv3dkkl90Yzbxo6gy4gbfcGsHCXYtszBpreH12dafP
EsWY4BhxM4Y7pMPkYXdngzc3IIoES7hXWId3UfMsWm8F9gJvsCXb4fewi+7m
BYtE8l1U8NdZMZHTSkJFn+LFauRoMjIMOkvZCBkOo6VjRdP7ZN1Jb4K9b7JV
8LtXn2KJKaEdbKVqZ2MDkhV++4tfn1xd378+v/3h7Pry5OLqNzCqb/t7DfNf
DFTzqQ9vple+K3A+patpH7Mwnijqu2QxRvyrhVn3+7S0SnR474bzxE6TBZM6
xEHNid0+JfxwNt1wAouez9yI42XbkBulrx+JL5kNbo48wJUj1ee4i0HTsDBY
3tS8t+JDYuRAjsF1DWjKk1wTBwRuRnScfYaYJ/my6fhimCgKRiCScOVANSNU
wJaneuU2tDIBg4F97XAtGh/xRdcdaK5nb58E4EhiLAQWpWmMlGQrgXIwQKTN
+FXQe9wTsFXmrW1l12AG+3guC60RidG8ANOCplnYM4vD7tdmhOeJRQp3+riC
cVtLRCy8oCw3IfkD5DP780F7dN+m+mwL9gPFvHYQaexZbqLuH18SYD9+qSUM
pPPG1wGSZrTI1d307kyp00AuXIX7H33Q8PgDpAKSuhrhRjvT5zgwRbEPK67f
U5wdfdO/DLGH7ZE+p9AOrtrNic1i6zAF+HcEeIg+guea6YtFz3Osj5df73kL
2ilucxYoAIGGUACgM5MFoZzFJLLFyFojYSIUW8A/tCPyjVMDlPkAo/CWpVmw
bQQg6t0zoTWZOWH4/lEH2uZ5Q3BCcOIN4dlAyY1h7CF4ibsQj0UmB0f4sf3s
3joil37Xt/FmxVBE23TxdhwitPCtbXz7hMd4fXozCSYodso+ZBbcdLhKZGM7
vmWkz7VdrtoBdes9eKQJkRGMn+54Pw4XITrbCB/c6Mx4dTGWnYm0IK9MsXhE
AlLmds8lOjnh4BKeckE7DoiRmCmL0+fvTd618WAkkI4UvjKi/oioTx0gvrOu
ALGiw0aESjLQNUlBVTy0lmDcx1SC7MfloD5C1huz7MqsUeDvfPyNBABFiFGA
d63NypCgibHUbuApYKwCcLDzbylKmMNBbgYzZvoEN8WU5STuh0lt3C+LpQZB
CMei72vbpLcnv5SPEK3I2kz8i+p5pReXRrkZj0hkHpDItGz7shXyzTnCXShT
aNQn+iZotnelgs8/59cSVly+vbsPqs0IBzLcksyrBV/tioLTzDMtD1rsJYXa
tKtZWKhomF8gFolbqALzlkFjuA6eJ3uAQSNA8yYYoAWNqR5t4yqmKAnDWUy6
2UnIJ2VK8twTrF+efK8QIAGAV87JwViCRWZxczCzNB5e4y0OjyygacERYzYg
7YlG0C0wIUon2KyKGCIsGicGv2dMibYjJlQhJtwxyBX5uqAqQCODgMSFq+wR
bI6gdGkK5qMp0B/BDysnuqhscNnzbY7wpsPO1NgiOQJ7tK7zFFG7TUVxIuw5
uJmKsijw0hlleCi6Ua/v72+eH82OgrnhH+vrbqwvwoPTwA6Ika4p2Gi3tTiQ
gYUclPZB1DsPibPDoNUQgdBMXCpK7+ZmV2N9Rm3BodsSuMgWxzZMhkEuXNCD
8i648YJfTNJJP3UpGYx1V7YWFiH3JFsaTiekyFvBqKAdP9GDuJmNi86f464I
A6CfEfkCShg+ApJEZRi20XE7+9ZFa2FT8LezOJvPdETmNhI3mkGqYrhC0lXb
ZJW3AiJsmJ+TfEfw0a0KgSDCh9HadMcHKaR+LcLJvOEYqj/5qxD93bGFn1PA
B8J+EkKdcNtJYdE1SBattYJlhp1IMMSwW/gCMXMfHdHgJg0BQY+dIlkL4KCB
wc5d1yr+iheKSi4dvA3fsb//7T/9IDMzCQ5Ag4F7S2mANJGXGY604Y4NDvkJ
9wYsvySz3U34pjTcADLYpP/+t/+KkXRX//1v/605eBZrUwNrY+yKt0jGMAuS
5adzBzIVHgsTEa+hQHGWS9wtyVKLsFAv38qBUn1/tOcjlEiJTPElhAF93ikN
CLm6EATKqJAQC/yC852ZwiRb6NIuDDPsGA0J5sQQcpQ9Euc0B5Sz12NmjmOW
3Tem6cRWsLPkzzaBBDHeGfZMcTF4g35Of3ZCmRc0CW4W7peCS6KaXZOsKCRd
yq0acE3xqwcpnidOy3dgQ9Ez+AyBMCeYHm3GB2KrlWT0BgR5mKIdvQoYTEWi
cRikKGN7GOipSTlp2WEBZRdSV7AVaxsXd5Q04sOC3lnnE9XbdVQLJW+afeLG
6XXfSbAQ/YtkRnt5h5nxmb6LSTRwvZSS2DEB0a4SCwA58JTK7Dlp0MjIopK6
4kFvwFZS3HA4kRS9BD9724igyvvdszRFsOiJIZAxT4ltCF4F9sbKI8bHoR0Z
CQxshbfV29FOcDonA5B+Ilk2IbeXFTmTrap4Tq6SPBE9gIWt112VcIKuFov8
586S1RVdqtPs4U+fqlBpz2PIh124BwJ8rgJRMS4yPd2IsWTVoGgCVIUFpvoA
gG1KSkggcBiyeIlxXCbDVoqC6XiBnswTUMLaC5tml988hCSoo9Olm6R2WM4k
bGdCt5kRnI+UNtczO04zU/nBqJS4mAVe0g8jYyL3ZiqQrQauvxjzQ6pzEpoP
a5M+OYsJhzrwrq4lyd/bdbeW2hSjPxdgthQ9/eUp5RDU6r+QA207Lx8wcLr/
LwwcfqAVEbTqJ/79RbSh+4GcCfl/BzL6U4ryDlFEPkzHHcgKhzGZ0usnWCev
E9InVKrlcPPr229Pv/zll198+DDKAqtQghsFQQuqQFEU5GgZWoWSrRNYJwkU
yjhZgf9b62H4ahiDEUHeiQCSoRH+NoU/VpH0xEXgL+5v49cpEEn+K1HCNL6I
FdueGCnmnSRP2T/FcQsTTy+6/7f79CLaNmWHuCiC0OOnn1hXVKzeE/Du9g//
yLxPOPLDZm55rD6jnI2VGvcgIRzTjNDqhjJulPuh/GkIP4j7tS3VRYtYNR0k
gSN6ATDOw3KnjmvzIRFP6ksZsALYRdiYcsSuWb5Liduh3kNQ/8QJUgaQuBME
WlMS+a9//av6QZJisx/avJ4N1uYvY1EobAhoxqmdyC/6t05S7j/YVWOADjhN
NqZQgNY/4g5PJLxsBCJjZO8lWveDJ2lWgN3E8amK66UQA0W6huuxM8KDizjk
igqBT//bg4OPjMPygM7t7Od0FMd56KAqPj6Sxn1snf69FIxy5Zk9RCKrOyWE
ZNJejzXDpzOqB0nlJ5RRQOsHqwjUMoOm9oaK4tItq5ZompMEH18GunBPXIZg
f3TywyvJt/UJC5Qsrlhe+74l6b4+Ul1Tfk0UQGzuPlJfeMGOg0EpBgWjC1Qh
9QRkoX1jv/wuKTYBYGB1wNm5gVwwm2jcEtynvoHQLtBnd4ISmWkmhJjs7Muz
p8cR9LUC3NwCdwzR4e87rr/0V1S9iA8HOlNfUHPUmqsWpzgBoZiklZczaL5t
Qrl+F+KDjyHH9fjyH/MmNHgmUwijNkRta+oVUXEErh1oFq4rnCjCn8JRAqUp
pK2E4qOY6tt5D19LSgzQmpQAAQy4LcUeFxyKc86IAj3pzvCdbSM2Uiib+Qe5
2NYr0t/oSCQITpwveKPUY8H5gNQ4AY/InAESmTY/FALHO070jQqPnPyTHC25
WHxPHvbF0RdHHz7M1Hec+OcTkTwDLxDCcHYZucPNefHPL1LBmmpIqd60W/C6
Mya+5vrmPrzpBXy5JFtK69tRUpMGqpRIUwNSHRO3wpcD/+9SUDWUM4kobD4V
9dO4kMjfif/ZefUNRNThZQo11mAgzNSkNk4MT3ZXZxoQllOMC2RpJRFhzuOx
9EmEdPEp7ssecUQc67Ur2OMSR62CjNd3+uTmYpSwCw6f85kswMXVt9e3l6DE
3oOJkkGRF9uqXQH76CNJEFS+p8wY85OEpFiq6S0bI+S2PwEdsixqCbFryoHY
JnYDhOWs5N+2NYjJ/e3F1av4vW+bkNWWzq1M9S0WtbOUj+AaOPXEwUIbS1gh
2MCgEIqrsqi8RmXN3LYNNRl4+yNtLrIO3qwPfGDVtvXx8+fBKKSY8ZzNWZaf
1Vmudoppgts9DH2pD+6/IWrLz+5DagGO7eMRQmnXVlK6fJVNmdVe7iZVe9Ug
ww7jpC1KISnFDTyf01oUHvEgzs99Hhw0ZyypYghsongP1ugdt7ZhrZFsZK0h
sz3sFmJFqZSVYAYzPADheLYHqZpjFuYnWg8bCRSWNUJ8RwAaaZ8kuqiDikk6
wKYxJWVTwsoT7r8SK6eeUV1mzZKsWHTNxpFDtxCarJVys3PgKlCZUvMAc7tc
qRJvgLuXQPO2bwbsU0chw86+eQg/XA+LJco+V0UuklIKIesFj9zS6CuzdACH
lLy8+cNZcL7r7CG+MDbExcQJ51rJHjhHsdsPpmK+D7M3BCAir9AL6qrg4iX1
65UMihlPx+iZ8HeIILAh64Zle+B5N+g1fV4/Fj/8CZaSmkECPDMGhExs6Cqi
ggNlGbgwzh5MRKI1r0zrIZL51KtBO7jQFn1wc3J6yFd3MobAT4eSvJ9WPvTl
km+RG/lpX49nLI0+HHuM9SIGEmlt6o+CuZ+BabM2yKxDj6ewIQjEyWswwbKk
Jr+ZAMRxaIf7Wr86v1fH0uaNkBwPXl/f4Umdwca+xvz710qWw6cdff6C9Pn0
t0/uURBmtM3CsXsY7jYFG7bqTCxYYx/CKWi0rfKyK4yi0QHqs6EFxOq0lIQ5
uUrbHF6ECZd4embIOpb8IFw/cxShpwBJfg+ZG8nQNw2TNsGeCk6nYdeS0yBt
UzGUtY5jq5cNRNKkzrHz5/sh3DNmjkOxOnRIUS37IBVNyWd5/cX794d7/j+6
/vs9B8qtnVnIKg5bNFVSlKAGQl6mKn1xNDjxIJncaukvYJpTbQPw6gN5Km0c
FVfpRSBlmob7k2UHQuH2ynLSahH2kTUAQV5f9X0Pgkq7rRgLJqOBQSVr6eMA
JUTTd/Opb03tpa8ydRY90Y6TugIraoYz1E8qrgD37f0gJU2mcP/q/uz6UlMj
bEB86l+ldq3YnM5GdRrclNBqpU6oe7uiD31HQSw0xsr2JOCe75ZLKD1yK+Gi
MYyZmzEu8l3ne94399IPOgY9PGTgVOZRCehje3Wwy1HmjzvGhoFT1gRgpMok
dydoBJr4pg1aUxIlSAegbbu+jDPoLPcx5BKEj1+qJ3JeolIpVJPsHHTMO1sm
zYUsIkSkPjcV22f6pmXcQkHhhhVsq5prIwN2MqjRqGDlB8N70vcw/3zv8nPS
KgXtE9hL7Uq3pKQ+WRh88TxV8sIPGEZaDWGN4k5eVz2KbUj5po/PvZzPAxSx
4bj8Gd0cki0md+nv2/Pfv724PT+jv+9en7x5k/5QYYSAQv9XP/P0+vLy/OpM
JlOyePRIPbs8+f6ZXI9nCHkurq9O3jyTUxj2fZKJcFq5/xEC56tVbNXgk/vm
9OZ//+foJYVQHDodfYXQST786uiXL/GBKhfyNnbA8pFsWMHDQIt8lUvu5Lct
zGJClg8k2MDAARJQ52d/JM38x7H+9Tyvj17+JjygDY8eRp2NHrLO9p/sTRYl
PvHoidckbY6e72h6LO/J96PPUe+Dh7/+bWkro6dHv/rtb9iE7kzesRPfxZ1x
03DhTAjKQr+Fj/P6X1VwaOi5HFI+UnE7lk5GkfdjV1ahhMdNPYFSWfrtmRRI
NiZ7qPAOTnBJ4MnGfXUn/oqjKsjW2EBaia0zpsCzyslGb0qS3b256Ss3w2GN
ibsJTUK8oUgEOh8D8WGDWiy/78cwxDi4xAS45Fkh/oypUyuNz6SvvlAVvxTu
L3jZGAUvaSlJUju3kBuA2SRfyh1TVuBSelBLac4PTR4+s0XfITPWfjpEaT+g
xIZK59hrXbDl4uTqZM8oQqCHOO9a4thTUIz9BvMQHvSpkzRh1q/x8mNreGMe
vNCpJSyE2r1lzk5uYya/SiNeRUKf5PSrqNIUy7V0UHwyfMaeSshILN4SovZw
CTbVuubAH4pV7/1sQdqwuc8m61cVfuKqBN1epUsR/LRwZdKs1vomA0F5RY8s
GA8eXFQPrVtbKKKJVQAeeJkhgqz0WYd4qLM89NZkZegVgQlfVLksebrKGvrV
0Y2hxIOnR3ddpS9t3rjQMBFHP6kRamlJwo51EkT/lJMa0ur4M3phEE91YsqS
xfaRDFes79PhXonaOE5u79S02/6NA20rqRnXjDwSaC9JTy0YfYi9BylZWfoY
UcOqyx8QfZmmyEzJGmBFT2KmPLDygXiBJsD72GUV21Z2S94DgBkvxEEVZYPV
TnaUytdNu+oa/Q3OnHjWWUYGiBNqQXGoD/LO4AKfF2vric9dEv/Qtw4gt+zM
jzS+qp36d2qnET/3fdZA869ciQ+TcNJu0e7ubSwI1VKom8WPQDL8SoxW7QkZ
i2z1mw6brsibxihW3kBG0Diu1AVtxXh+wV3B4JRSm3yqxy6eMAEeHaQhyh5r
SwtjCv5p2aCLQ/3MCX+mfwd1rrf8i1pwnenoguDr8wbE/X4TtIzv31aceL5B
2GBK5twWx/V/Q+rxjrY9AAA=

-->

</rfc>
