浏览器如何确定代理是否不可用'使用PAC文件时

时间:2015-12-15 13:45:18

标签: javascript browser proxy 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的代理   端口8080:

     

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

现在,IP可能无法响应来自该端口上客户端系统的SYN数据包,或者如果它没有运行Web代理服务,它可能会提供自己的页面。在第一种情况下,浏览器将在几次TCP超时后切换到辅助代理,这些超时几乎持续几秒钟(但可能会因客户端上TCP / IP堆栈的配置而异)。在第二种情况下,用户代理/浏览器很高兴,因为它获得了对请求的响应,即使它不是它想要访问的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!