2015-12-15 37 views
0

时,我有以下PAC文件代码:如何在浏览器确定代理是“不可用”使用PAC文件

function FindProxyForURL(url, host) 
{ 
    return "PROXY proxy1:8080" + "PROXY proxy2:8080; "; 
}; 

根据Java中,这应该工作如下(https://docs.oracle.com/cd/E19575-01/821-0053/adyrr/index.html):

在以下示例中,返回值告诉浏览器在端口8080上使用名为w3proxy.example.com的代理 。如果该代理是 不可用,浏览器将使用名为proxy1.example.com的代理,端口号为:

PROXY w3proxy.example.com:8080; PROXY proxy1.example.com:8080

在实验室中测试时,似乎explorer在负载均衡模式下使用这些代理。我没有看到wireshark中的这些代理的任何探测,但是在一些网站重新加载之后发生了故障转移。

浏览器如何确定代理是否存活的天气? 根据一些网站,它说,浏览器也使用这些代理负载平衡,这是正确的?

在此先感谢。

回答

0

一个健康的用户代理将简单地接收PAC文件返回的第一个代理,并尝试将流量转发到为其域名返回的IP地址。

现在,IP可能不会响应该端口上来自客户端系统的SYN数据包,或者如果它未运行Web代理服务,它可能会为其自己的页面提供服务。在第一种情况下,浏览器会在几秒钟内(但可能会因客户端上的TCP/IP协议栈的配置而异)发生TCP连接超时后切换到辅助代理。在第二种情况下,用户代理/浏览器很高兴,因为它获得对请求的响应,即使它不是它想要访问的Web资源。

  • 对于第一个示例,您可以尝试使用4.2.2.2:80作为第一个代理并观察。它是一台NTP服务器,不会在80上听,所以你很快就会超时。

  • 对于第二个示例,您可以尝试使用purple.com:80作为第一个代理。它是一个普通的Web服务器。无论您发送什么请求,它都会提供自己的页面,但PAC文件呈现器不会尝试次要代理,因为它正在获得响应。

现在出现代理名称解析为IP:端口套接字并且正在运行Web代理服务的情况。让我们考虑一个案例,其中Web服务器只喜欢来自某些白名单源IP的请求,并且该Web代理没有在那里列出。

  • 代理服务器将响应客户端,并尝试与预期的Web服务器建立连接,服务器不会响应。代理服务器尝试访问有问题的Web资源的尝试次数以及它与客户端保持连接的时间取决于代理服务的实现。

  • 特定的时间之后,连接将超时和客户端的用户代理将尝试在PAC文件中可用的下一代理声明。

这是对用户代理(通常是Web浏览器)如何确定代理是否存活的响应。

现在,来到你的关于负载均衡第二个问题,那肯定是不正确的。默认情况下,只有在上述情况下,浏览器才会切换到下一个代理语句。但是如果你愿意,你可以在你的PAC文件中调用函数myIpAddress()并解析它返回的IP地址的子网部分。然后,您可以为不同的子网应用单独的代理语句。我见过不少机构使用这种可怜的技术通过PAC文件配置实现基于源IP的负载平衡。

HTH!

相关问题