<?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-00" 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-00"/>
    <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="01"/>
    <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>It is worth carefully noting that 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>It is worth noting that 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="the-discovery-process">
      <name>The Discovery Process</name>
      <section anchor="wpadng-overview">
        <name>WPADNG Overview</name>
        <t>This sub-section will present a descriptive overview of the WPADNG
protocol. It is intended to introduce the concepts and flow of the
protocol. The remaining sub-sections (3.2-3.7) will provide the
rigorous specification of the protocol details. WPADNG uses a
collection of pre-existing Internet resource discovery mechanisms to
perform web proxy auto-discovery. Readers may wish to refer to REF1
for a similar approach to resource discovery, since it was a basis
for this strategy.  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 are as follows.
- DNS-SD
- Dynamic Host Configuration Protocol v4 or v6 depending on network.</t>
        <t>The WPADNG client attempts a series of resource discovery requests,
using the discovery mechanisms mentioned above, in a specific order.
Clients only attempt mechanisms that they support. Each
time the discovery attempt succeeds; the client uses the information
obtained to construct a CURL. If a CFILE is successfully retrieved</t>
        <t>at that CURL, the process completes. 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 DNSSD, followed by DHCP. 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.foo.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.  3.2.1.
Periodic Discovery</t>
        <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 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">DNS-SD</td>
              <td align="left">
                <bcp14>MUST</bcp14></td>
            </tr>
            <tr>
              <td align="left">DHCP</td>
              <td align="left">
                <bcp14>MUST</bcp14></td>
            </tr>
          </tbody>
        </table>
        <t>SUMMARY OF DISCOVERY MECHANISMS</t>
        <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 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 innumerous 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 RFC 2132 REF7 for a list of existing DHCP
options. See "Conditional Compliance" for more information on DHCP
requirements.</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>An example STRING value would be:
"http://server.domain/proxyconfig.pac"</t>
        </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>
  </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="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 398?>

<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:
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
PgAA

-->

</rfc>
