企业IT管理员IE11升级指南 系列:

【1】—— Internet Explorer 11增强保护模式 (EPM) 介绍

【2】—— Internet Explorer 11 对Adobe Flash的支持

【3】—— IE11 新的GPO设置

【4】—— IE企业模式介绍

【5】—— 不跟踪(DNT)例外

【6】—— Internet Explorer 11面向IT专业人员的常见问题

【7】—— Win7和Win8.1上的IE11功能对比

【8】—— Win7 IE8和Win7 IE11对比

【9】—— IE10与IE11的功能对比

【10】—— 如何阻止IE11的安装

【11】—— 通过SCCM 2012和WSUS部署Internet Explorer 11

【12】—— 兼容视图列表介绍

【13】—— 如何把IEMP迁移到GPP

【14】—— IE11代理服务器配置

【15】—— 代理自动配置脚本

【16】—— 使用Compat Inspector快速定位IE兼容性问题

【17】—— F12 开发者工具

IE11代理服务器配置

自动检测配置

WPAD代表Web Proxy Auto-Discovery Protocol,是客户端通过DHCP或DNS协议探测代理服务器配置脚本url的一种方式。当IE定位脚本并将脚本下载到本地之后,就可以通过该脚本 来为不同的url选择相应的代理服务器。目前主流浏览器一般都支持WPAD。本文主要介绍IE中WPAD相应的工作原理以及常见WPAD相关的问题的解决 方案。

工作流程

当IE Internet Options连接中配置为自动发现设置时,IE会根据以下方式来探测WPAD.dat文件

  • DHCP(252 option)
  • DNS A record query
  • NetBios

如果DHCP配置了WPAD的地址,IE则使用该地址发送http get请求得到相应的WPAD.dat文件。即使该地址请求失败,IE也不会继续使用DNS探测的结果。

如果DHCP服务器没有提供WPAD信息,DNS探测结果就会被采用。例如用户的计算机名为pc.department.branch.example.com,IE会按照如下url顺序来请求WPAD.dat文件。

如果DNS探测仍然失败,IE则通过Netbios来请求WPAD。

当Netbios请求仍然失败的话,IE则会尝试直接发送网络请求。

DHCP WPAD探测逻辑

IE通过调用DhcpRequestParams方法来得到DHCP 252 option。根据MSDN对该方法的描述,该返回结果会在本地缓存起来。

DHCP clients store data obtained from a DHCP server in their local cache. If the DHCP client cache contains all data requested in the RecdParams array of a DhcpRequestParams function call, the client returns data from its cache. If requested data is not available in the client cache, the client processes the DhcpRequestParams function call by submitting a DHCP-INFORM message to the DHCP server。

因此DHCP-INFORM消息只在第一次或者cache被清空的时候被发送。以下是一个DHCP-INFORM消息的示例。

55     10.0.0.101  255.255.255.255 DHCP        DHCP:Request, MsgType = INFORM, TransactionID = 0x33276787

56     10.0.0.1      10.0.0.101  DHCP          DHCP:Reply, MsgType = ACK, TransactionID = 0x33276787

  Frame: Number = 56, Captured Frame Length = 371, MediaType = ETHERNET

……

 - Dhcp: Reply, MsgType = ACK, TransactionID = 0x33276787

    OpCode: Reply, 2(0x02)

    Hardwaretype: Ethernet

    HardwareAddressLength: 6 (0x6)

   ……

  + MessageType: ACK - Type 53

  + ServerIdentifier: 10.0.0.1 - Type 54

  + SubnetMask: 255.255.0.0 - Type 1

  + DHCPEOptionsVendorSpecificInformation:

  + DomainName: ctest.local - Type 15

  + DomainNameServer: 10.0.0.1 - Type 6

  + WPAD: http://consto.ctest.local/WPAD.dat - Type 252

  + End:

另外有两点值得注意:

  • IE只支持IPv4 DHCP的探测,不支持IPv6 DHCP探测
  • IE会尝试通过所有的网络卡来探测DHCP设置。

当IE得到WPAD.dat文件的地址,IE发送http get请求得到WPAD.dat文件,这与通过IE地址栏写入url发送请求一样。一旦WPAD.dat文件返回成功,IE会将该WPAD.dat的地址 存进注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings中。另外将WPAD.dat文件写进IE缓存目录 Temporary Internet Files。当IE再次发送其他网页请求的时候,IE会从注册表中读取WPAD.dat的地址,之后发现缓存中可以找到该地址对应的文件缓存,之后使用该 文件来确定相应的代理服务器。

常见问题

在使用IE过程中有以下两种问题比较常见,

1. DHCP服务器上更新了252 option的WPAD.dat地址,但是IE并没有按照新地址的WPAD.dat文件来使用代理服务器。 这种情况多数是由于IE缓存了WPAD.dat的地址在注册表HKCU\Software\Microsoft\Windows \CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings。

2. WPAD.dat文件内容被更新,但是IE并没有按照的新WPAD.dat文件来使用代理服务器。 这种情况多数是由于IE缓存了WPAD.dat文件,没有去请求新的WPAD.dat的内容。

对于第一个问题,我们可以执行如下步骤来清空不同级别的缓存,

清空DHCP缓存

ipconfig /release

ipconfig /renew

清空DNS缓存

ipconfig /flushDNS

清空注册表WPAD.dat地址缓存

HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\SavedLegacySettings

清空IE缓存

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8

对于第二个问题,可以从客户端和服务器两个方面去解决,

  • 在客户端清空IE缓存。
  • 在服务器端为WPAD.dat文件添加cache-control: no-cache http header,这样WPAD.dat文件将不会被IE缓存。即使服务器WPAD.dat内容被频繁更新客户端也会及时得到。不过这样会对性能有一定的影 响,毕竟要多发送请求来得到WPAD.dat文件。

调试方法

如果上述解决方案对你遇到的问题不起作用,也可以尝试通过以下方式来查找问题发生的原因,对于这类问题一般的调试方法是通过Process Monitor+ Networ Monitor, 通过process monitor来追踪注册表访问情况和本地缓存中wpad文件的访问情况,通过network monitor来抓包查看是否发送了wpad相关请求。

Process Monitor

企业IT管理员IE11升级指南【14】—— IE11代理服务器配置-LMLPHP

Network Monitor

企业IT管理员IE11升级指南【14】—— IE11代理服务器配置-LMLPHP

自动配置脚本

代理自动配置(Proxy auto-config,简称PAC) 是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。

一个PAC文件包含一个JavaScript形 式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理其或者直接访问。 当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。 浏览器在访问其他页面以前,首先访问这个PAC文件。

要使用PAC,我们应当在一个网页服务器上发布一个PAC文件,并且通过在浏览器的代理链接设置页面输入这个PAC文件的URL。

一个PAC文件是一个至少定义了一个JavaScript函数的文本文件。这个函数FindProxyForURL(url, host)有2个参数:url是一个对象的URL,host是一个由这个URL所衍生的主机名。按照惯例,这个文件名字一般是proxy.pac.

虽然大多数客户端无论从HTTP请求返回的MIME类型是什么都能正确处理,但为了完整性和最佳的兼容性,我们应该设置网页服务器将这个文件的MIME类型声明为 application/x-ns-proxy-autoconfig 或者 application/x-javascript-config .

没有什么理由偏爱一种MIME类型多一些,如果有的话,假设 application/x-ns-proxy-autoconfig 相对 application/x-javascript-config 被更多的客户端所支持是可以理解的。因为它被定义在最初的Netscape规范里面,后者是最近才开始被使用。

一个非常简单的PAC文件内容

function FindProxyForURL(url, host)

{

return "PROXY proxy.example.com:8080; DIRECT";

}

调试方法

本地PAC测试

有些情况下PAC文件看上去完全没有起作用,我们可以通过将PAC文件下载到本地,并通过本地文件的方式来访问该PAC文件进行测试。

企业IT管理员IE11升级指南【14】—— IE11代理服务器配置-LMLPHP

注意在IE11中默认禁用了本地PAC文件,进行本地PAC文件测试需要更改以下注册表项,

Key:   HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ Value: EnableLegacyAutoProxyFeatures Type:  REG_DWORD Data:  1

通过alert()调试

通过添加alert()方法可以有效的帮助调试,例如myIpAddress()取得了一个错误的地址,通过alert方法可以很容易的发现类似问题。

if ((host =="proxyinfo.company.com")) {     alert("Local IP address is: " + myIpAddress()); }

alert也可以帮助定位脚本语法错误,例如在不同的逻辑路径上进行alert,正确情况下会弹四个对话框,但最终仅仅弹出三个,那么我们可以判断在第三个于第四个alert之间可能存在语法错误。

将PAC方法至于HTML页面中调试

将PAC文件的function FindProxyForURL(url, host)方法置于html页面中然后通过浏览器打开,可以很容易的发现脚本中的语法错误。

<html> < head> < script language="JavaScript">
    Insert your ENTIRE PAC file here
< /script> < /head> < body> test < /body> < /html>

PAC文件下载

由于PAC文件通常被放在一个Web服务器上,一个常见的问题就是下载问题,判断是否存在PAC文件下载问题,可以通过浏览器直接输入PAC地址尝试下载来查看是否能够下载成功。

手动配置

手动配置代理是一种常见的代理配置方法,通过在Internet Options – Connections – LAN Settings中指定特定代理地址来实现。

企业IT管理员IE11升级指南【14】—— IE11代理服务器配置-LMLPHP

手动配置也经常被用来定位自动配置中代理的问题,例如怀疑自动配置中某代理存在连接问题,可以通过手动直接指定来确定是否可以成功连接。

注意:使用手动配置时要禁用自动配置和配置脚本,否则自动配置会覆盖手动配置。

常见问题

手动配置中一个常见问题,当连接到本地网络上使用的 Internet 协议 (IP) 地址或完全限定域名 (FQDN) 的 Web 服务器时,Microsoft Internet Explorer 或 Windows Internet Explorer 连接通过指定的代理服务器即使在开启了Bypass proxy server for local addresses选项。

但是,如果您连接到 Web 服务器的主机名 (例如,http://webserver) 使用的 IP 地址 (例如,http://10.0.0.1) 或 FQDN (例如,http://webserver。domainname.com)、 跳过代理服务器和 Internet Explorer 直接连接到服务器。

该问题原因在于Bypass proxy server for local addresses仅对host name进行检查,若要跳过某一范围内的 IP 地址或特定域的名称,指定代理服务器例外列表中的地址:

<!--[if !supportLists]-->·         <!--[endif]-->在 Internet Explorer 中,在工具菜单上,单击Internet 选项。

<!--[if !supportLists]-->·         <!--[endif]-->在连接选项卡上,单击局域网设置。

<!--[if !supportLists]-->·         <!--[endif]-->单击高级和异常区域中键入适当的信息。

04-13 23:39