当前位置: 首页 > 知识库问答 >
问题:

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

陆飞捷
2023-03-14

我有以下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的代理。如果该代理不可用,浏览器将使用端口8080上名为proxy1.example.com的代理:

代理w3proxy。实例com:8080;代理代理1。实例通讯:8080

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

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

提前感谢。

共有1个答案

荆修明
2023-03-14

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

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

>

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

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

    现在出现代理名称解析为打开并运行Web代理服务的IP: port套接字的场景。让我们考虑这样一种情况,即Web服务器只喜欢来自某些白名单源IP的请求,而此Web代理未在其中列出。

    >

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

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

    现在,谈到你关于负载平衡的第二个问题,这绝对是不正确的。默认情况下,浏览器只会在我上面提到的场景中切换到下一个代理语句。但如果你愿意,你可以在你的PAC文件中调用函数myIpAddress()并解析它返回的IP地址的子网部分。然后,你可以为不同的子网应用单独的代理语句。我见过相当多的组织使用这种糟糕的技术通过PAC文件配置来实现基于源IP的负载平衡。

    嗯!

  •  类似资料:
    • 问题内容: 我需要一些返回布尔值的函数来检查浏览器是否为Chrome。 如何创建此类功能? 问题答案: 更新:以获取更新的处理方式。以下答案可能仍然有效,但可能会在其他浏览器中引发误报。 但是,如前所述,用户代理可以被欺骗,因此在处理这些问题时总是最好使用功能检测,如其他答案所述。

    • 在Windows上,是否可以将Atom配置为使用系统默认代理,而不是在.apmrc文件中手动指定代理设置? 我最近开始使用atom-editor for Windows(Windows7 Pro),到目前为止我很喜欢它。我已经搜索了一段时间,试图让编辑能够连接到外部世界,但没有遇到任何成功。 我们的网络(我不是网络专家)配置为使用代理服务器(内部)访问Internet。在我的系统中,这是通过“自动

    • 我需要使用自动代理配置URL设置浏览器的代理,如下面的屏幕截图所示。 我正在尝试使用Selenium和Browserack作为测试环境来实现这一点。 设置代理,如下所示。 代理代理=new Proxy(); proxy.setProxyAutoconfig Url("http://pokgsa.ibm.com/gsa/pokgsa/home/j/m/jmit/web/public/proxy.pa

    • 问题内容: 截至本文发布之日,名称“ Microsoft Edge”才被正式宣布为新Windows 10的默认浏览器。 问这个问题还为时过早,但是我想知道是否有新的Selenium WebDriver可用,如果没有,是否有任何信息可以告诉我们我们期望等到开发出来再等多久? (Windows 10的技术预览版已经发布,因此在我看来这并不是一个愚蠢的问题。) 问题答案: 是的,Microsoft Ed

    • 问题内容: 我用Yeoman的应用程序启动了Angular.js应用程序,其中包括Karma测试。然后,合理的失败是因为Karma无法找到任何浏览器。(尚未在应用程序的node_modules / karma配置文件中设置。) 我正在通过SSH在远程计算机上进行开发,我认为(如果我错了,请告诉我)安装Chrome毫无意义。 那么有可能在没有任何浏览器的情况下运行Karma吗? 问题答案: 业力 需

    • 问题内容: 我们只是在不使用无头浏览器的情况下实施CI,而是使用实际的浏览器。因此,一旦开发团队签入了新代码,我们的烟雾自动化代码将在汽车机器上作为后台进程运行并发送结果。如果有任何故障,它甚至可以跨屏幕截图发送。我们没有得到的是,使用无头浏览器进行上述处理的好处是什么。我们需要我们的烟雾脚本来获得此覆盖范围。假设提交了一个庞大的表单,该表单可以在5分钟内使用“选择”,“日历”,“上载”等控件运行