Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器如何确定代理是否为';不可用';使用PAC文件时_Javascript_Browser_Proxy_Pac - Fatal编程技术网

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

Javascript 浏览器如何确定代理是否为';不可用';使用PAC文件时,javascript,browser,proxy,pac,Javascript,Browser,Proxy,Pac,我有以下PAC文件代码: function FindProxyForURL(url, host) { return "PROXY proxy1:8080" + "PROXY proxy2:8080; "; }; 根据Java,这应该按如下方式工作(): 在以下示例中,返回值指示浏览器使用 端口8080上名为w3proxy.example.com的代理。如果代理是 不可用,浏览器在上使用名为proxy1.example.com的代理 端口8080: PROXY w3proxy.examp

我有以下PAC文件代码:

function FindProxyForURL(url, host)
{
    return "PROXY proxy1:8080" + "PROXY proxy2:8080; ";
};
根据Java,这应该按如下方式工作():

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

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

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

浏览器如何确定代理是否处于活动状态? 根据一些网站的说法,浏览器在负载平衡中也使用这些代理,对吗


提前感谢。

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

现在,该IP可能不会响应来自该端口上客户端系统的SYN数据包,或者如果它没有运行web代理服务,它可能会服务于自己的页面。在第一种情况下,浏览器将在TCP超时几秒钟后切换到辅助代理(但可能会根据客户端上TCP/IP堆栈的配置而有所不同)。在第二种情况下,用户代理/浏览器很高兴,因为它得到了对请求的响应,即使请求不是它想要访问的web资源

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

  • 对于第二个示例,您可以尝试使用purple.com:80作为第一个代理。它是一个常规的web服务器。无论您发送什么请求,它都将为自己的页面提供服务,但PAC文件呈现程序不会尝试辅助代理,因为它会收到响应

现在出现了这样一个场景:代理名称解析为IP:port套接字,该套接字是打开的,正在运行web代理服务。让我们考虑一个Web服务器只喜欢来自某些白色列出的源IPs的请求的情况,并且这个Web代理没有在其中列出。p>
  • 代理服务器将响应客户端并尝试与预期的web服务器建立连接,但服务器不会响应。代理服务器尝试访问相关web资源的次数以及它保持与客户端连接打开的时间取决于代理服务的实现

  • 在特定的持续时间之后,连接将超时,客户端的用户代理将尝试PAC文件中可用的下一个代理语句

这是对用户代理(通常是web浏览器)如何确定代理是否处于活动状态的响应

现在,进入关于负载平衡的第二个问题,这肯定是不正确的。默认情况下,浏览器将仅在我上面提到的场景中切换到下一个代理语句。但如果需要,可以在PAC文件中调用函数myIpAddress(),并解析它返回的IP地址的子网部分。然后,您可以为不同的子网应用不同的代理语句。我见过不少组织使用这种糟糕的技术通过PAC文件配置实现基于源IP的负载平衡


请检查这两个SYN数据包是否同时发送到两个不同的代理服务器,然后发送两个HTTP GET。这是Chrome。但是你的pac文件是什么样子的?pac返回两个IP地址。我(我们)的理论是,Chrome根据URLIE 10缓存代理IP地址来缓存代理IP。浏览器试图避免在TCP SYN之前执行非平凡的JS,对此我并不感到惊讶。