版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
https://windtear.net/2008/10/proxy_pac_ie_firefox_chrome.html
ipcn 提供 pac 代理服务 需要认证
然后发现来自"WinHttp-Autoproxy-Service/5.1" 请求 .pac 特别多 也不含压缩头
Google 了下发现
http://code.google.com/p/chromium/issues/detail?id=1684
http://msdn.microsoft.com/en-us/library/aa383153(VS.85).aspx
说是调用WinHttpGetProxyForUrl时把fAutoLogonIfChallenged设成false就没事了
WinHTTP AutoProxy 由于设的是 true 所以每次都去请求:(
然后又观察了 IE Firefox Chrome 等处理 pac 的情况
IE GET pac 不带压缩头 带原始的 User-Agent:
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Win32)
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Win32)
还有 Accept: */* 和 Cookie 之前如果已cache的话 还会带上 If-Modified-Since
Firefox 带的头很全 包括压缩头 Accept-Encoding: gzip,deflate 和 no-cache
Google Chrome 比较懒 不带压缩头 连 User-Agent 头都没有
pac 代理脚本这块可以用一些小技巧 比如
function FindProxyForURL(url, host)
if - else if - else
var lchost = host.toLowerCase();
var lcurl = url.toLowerCase();
(url.substring(0, 4) != "http")
isPlainHostName(host)
dnsDomainIs(host,".cn")
!isResolvable(host)
rip = dnsResolve(host);
isInNet(rip,"192.168.0.0","255.255.0.0")
(shExpMatch(host, "*sixxs.org"))
return "PROXY test.proxy.ipcn.org:3128; DIRECT";
详见 Netscape 的帮助 proxy-live.html
关于 MIME type 推荐的是 application/x-ns-proxy-autoconfig 不过 text/plain 也都干活
遇到的问题有:
如果pac下载不全 每次调用 isInNet(host, ...) 都会发起dns查询 改成rip就好了
Vista Win2003 的 WinHTTP AutoProxy 服务会每个请求都去刷 pac
Web Proxy Auto-Discovery (WPAD) protocol: (/wpad.dat)
DHCP option 252
option wpad code 252 = text;
option wpad "http://192.168.1.1/proxy.pac";
Redirect /wpad.dat http://192.168.1.1/proxy.pac
代理过程:
需认证的话 第一次返回 407(ERR_CACHE_ACCESS_DENIED)
给出 Proxy-Authenticate: Basic realm="ipcn proxy server"
认证通过后 如果不允许返回 403(ERR_ACCESS_DENIED)
如果允许则以后带上 Proxy-Authorization: Basic ... 头正常使用代理
|