WPAD客户端会按顺序用上面提供的发现机制发送一系列资源发现请求。客户端只会尝试它们所支持的机制。只要某次发现尝试成功了,客户端就会用得到的信息来构建PAC CURL
如果从那个CURL上成功获取到PAC文件,这个过程就结束了。如果没有,客户端就从它在预定义的资源发现请求系列里中断的地方开始恢复。如果尝试了所有的发现机制后,都没有获取到PAC文件,WPAD协议就失败了,客户端会配置为不使用代理服务器
客户端首先会尝试DHCP,然后是SLP。如果没有获取到PAC文件,客户端会继续执行那些基于DNS的机制
客户端会在DNS SRV、知名主机名和DNS TXT记录等方法中循环多次。每次都使DNS查询的QNAME变得越来越不具体。通过这种方式,客户端就可以定位出尽可能具体的配置信息,但也可能会转而使用一些不太具体的信息。每次DNS查找都会在QNAME前加上wpad,用以说明请求的资源类型
考虑主机名为johns-desktop.development.foo.com的客户端。下面是一个完整的WPAD客户端会执行的发现尝试顺序:DHCP;SLP;用QNAME=wpad.development.foo.com 进行DNS A查找;用QNAME=wpad.development.foo.com进行DNS SRV查找;用QNAME=wpad.devdopment.foo.com进行DNS TXT查找;用QNAME=wpad.foo.com进行DNS A查找;用QNAME=wpad.foo.com进行 DNS SRV 查找;用QNAME=wpad.foo.com进行DNS TXT查找
3、用DHCP进行CURL发现
要使用这种机制,就必须将CURL存储在WPAD客户端吋以查询的DHCP服务器上。WPAD客户端可以通过向DHCP服务器发送DHCP查询来获取CURL。(如果DHCP服务器中配置了这种信息),就可以在DHCP可选代码252中获取CURL。所有WPAD客户端实现都必须支持DHCP
如果WPAD客户端已经在其初始化过程中执行了DHCP查询,DHCP服务器可能就已经提供了那个值。如果无法通过客户端OS API获得这个值,客户端就向DHCP服务器发送一条DHCPINFORM报文,以获取这个值
WPAD的DHCP可选代码252为STRING类型,可以是任意长度。这个字符串中包含了一个指向适当PAC文件的URL。比如:
""
4、DNS A记录查找
要让这种机制工作,就必须将合适的代理服务器的IP地址存储在WPAD客户端可以查询的DNS服务器上。WPAD客户端会向DNS服务器发送一个A记录查询,以获取CURL。成功查询的结果中会包含合适的代理服务器的IP地址
WPAD客户端实现必须支持这种机制。这应该是很简单的,因为它只要求基本的DNS A记录查找。对WPAD来说,规范使用了“wpad”的“知名别名”来进行Web代理自动发现
客户端执行了下列DNS查找:
QNAME=wpad.TGTDOM., QCLASS=IN, QTYPE=A
成功的查找中包含了IP地址,WPAD客户端根据这个地址构建CURL
5、获取PAC文件
只要创建了候选的CURL,WPAD客户端通常都会向CURL发送一条GET请求。发出请求时,WPAD客户端必须要发送一些带有适当CFILE格式信息的Accept首部,这些CFILE格式都是它们所能处理的。比如:
Accept: application/x-ns-proxy-autoconfig
而且,如果CURL的结果是要进行重定向,客户端就必须跟随这些重定向到其最终目的地
6、何时执行WPAD
至少要在出现以下情况的时候进行Web代理自动发现:
a、在Web客户端启动的时候——WPAD只在第一个实例启动的时候执行。后面的实例会继承这种设置
b、只要有来自网络栈的通知,就说明客户端主机的IP地址改变了
哪个选项在其环境中有意义,Web客户端就可以选择哪个。而且,客户端还必须根据HTTP的过期时间,为之前下载的PAC文件的过期时间尝试一个发现周期。PAC文件过期时,客户端遵循过期时间,重新运行WPAD过程是很重要的
如果PAC文件没有提供替换方案,在当前配置的代理失效的情况下,客户端还可以选择重新运行WPAD过程
只要客户端决定使当前的PAC文件失效,就必须重新运行整个WPAD协议,以确保它会发现当前正确的CURL。具体来说,就是协议不能有条件地获取PAC文件的If-Modified-Since
WPAD协议广播与/或多播通信可能需要大量的网络环回时间。WPAD协议的激活频率不应该高于上面指定的频率(比如在每次获取URL时进行一次)
7、WPAD欺骗
WPAD的IE5实现允许Web客户端在没有用户干预的情况下,自动检测代理设置。WPAD使用的算法会在全称域名前加上主机名“Wpad”,并会逐渐刪除子域名,直到它找到能够响应主机名的WPAD服务器,或到达第三级域名。比如,域a.b.microsoft.com中的Web客户端会先查询wpad.a.b.microsoft、wpad.b.microsoft.com,然后再查询wpad.microsoft.com