在 IE 中使用 HTTP 代理(或不使用)时 DNS 查找如何工作

在 IE 中使用 HTTP 代理(或不使用)时 DNS 查找如何工作

我最近参加了一个讨论,讨论的是客户端从代理服务器请求页面时会发生什么。我只是想确保我对这个事件序列的理解在一般情况下是正确的:

  1. 用户请求网站
  2. 客户端向其配置的 DNS 服务器发送 DNS 请求,以解析目标 IP 地址(这首先是为了适应配置为绕过代理的 HTTP 请求)
  3. 从 DNS 收到目标 IP 后,在发送 HTTP 请求之前,将根据例外列表检查该请求
  4. 如果目标服务器不在例外列表中,则请求将被转发到代理服务器。
  5. 如果目标服务器在例外列表中,则根据客户端机器的路由表转发请求。

如有任何反馈,我们将不胜感激。

答案1

不完全是:这取决于客户端的配置方式。让我们以 IE 为例。

如果您将 IE 配置为明确的代理人:例如未勾选其他选项,代理设置为:8080。

  1. 用户输入地址

  2. IE 检查地址是否与 IE 代理例外列表的字符串匹配(即“绕过这些地址的代理:”)

    A。如果它与旁路列表, 这客户用途自己的 DNS解析名称,然后客户端直接连接到目标 IP 地址在端口 80 上(假设),然后发送如下请求:

    GET /something.htm HTTP/1.1
    Host: fulldomainame.example.com

    b.如果没有匹配的绕过列表条目, 继续:

  3. IE 连接到其配置的代理,并发送以下形式的请求:

    GET http://fulldomainname.example.com/something.htm HTTP/1.1

    额外信息:这种使用URL 中的 FQDN是你可以告诉客户它正在与代理而不是真正的网络服务器对话

  4. 代理解析该主机名使用它自己的DNS,然后连接到目标站点(就像上面步骤 2 中的客户端一样)等等。

使用 WPAD/PAC 时:

在使用 Web 代理自动发现 (WPAD) 或代理自动配置 (PAC 或 Autoconfig) 脚本(例如启用自动配置时由 ISA/TMG 提供的脚本)的情况下,情况有所不同:

  1. 用户输入地址

  2. 客户下载当前wpad.dat/自动代理.js/.pac文件从其配置位置

  3. 客户端寻找功能“查找代理服务器",并执行它

  4. Autoproxy 脚本处理主机名网址。这是一个功能有限的 javascript 文件,但仍然可以实现很多功能:

    a.这可能包括名称解析(IsInNet,DnsResolve)

    b. 这可能包括字符串匹配(ShExpMatch)

    c. 这可能包括数到一百万(我++)

    d. 这可能包括令人讨厌的警报弹出消息如果管理员是个混蛋

    • (或者只是搞笑)
    • ((或调试))
  5. 查找代理服务器函数至少返回一个字符串:要使用的最佳代理的有序列表(以分号分隔)

    a. 要么“直接的”,在这种情况下,客户端需要自行解析名称并直接连接,就像上面的 Bypass 情况一样

    b. 或“PROXY 代理名称:8080”或类似情况,在这种情况下,客户端连接到该代理上的该端口,告诉它获取完整 URL,以及代理执行名称解析

    • 作为例子:如果脚本函数返回“代理 yourProxy:8080;直接”告诉客户端连接到你的代理在 TCP 端口上8080请求此 URL,并且如果无法建立连接,请尝试直接连接。 笔记TCP 会话设置失败并不是很快,因此对于用户来说,这可能不是一个愉快的故障转移体验,但总比没有好。也许吧。

偶尔会出现故障、细微差别和无法解释的行为,但大多数情况下,只要事情没有以奇怪和有趣的方式发生,以上就是我多年来看到它的工作方式。较新的浏览器正在优化行为、并行化内容并一直在尝试有趣的事情,因此请查看特定浏览器的最新文档以了解详细信息。

WinSock 代理 / ISA 防火墙客户端 / TMG 客户端

如果您对 Winsock 代理客户端(来自 TMG/ISA 服务器)感兴趣,那么情况就不同了,它具有更大的灵活性和可移动部件。这里就不多说了,但有文档描述了它的工作原理。简而言之:它插入 Windows 套接字,可以拦截基于 TCP/UDP 的流量和基于每个应用程序和每个用户的名称解析请求。非常强大,但现在也已弃用,并且几年没有更新了。

客户可能非常粘人:

最后说明:一旦 HTTP 客户端决定与给定站点/url 的代理进行通信,代理没有办法告诉它不要这样做

没有 HTTP 状态代码或标头表示“我不提供该服务,您应该直接转到该服务”...

一旦客户端决定某个 URL 是代理服务,代理死亡之握接踵而至。

避免这种情况的唯一方法是在客户端建立连接之前在 PAC 或 Bypass 列表中获取选择逻辑。

关于区域和 PAC 文件的最后一点说明

IE 会将以下网站视为直接的已连接(即使 URL 中带点)是本地 Intranet 区域的一部分(默认情况下 - 可在区域属性中设置),因此将执行诸如允许集成 Windows 身份验证到这些站点(即 Kerberos 和/或 NTLM 身份验证,透明)之类的操作。因此,控制某些东西是否在本地 Intranet 区域中定义了它在自动身份验证方面的可信程度。同样,至少默认情况下是这样。

答案2

我不确定你的 DNS 部分是否正确。我曾见过一台没有有效 DNS 服务器的机器使用代理在 IE 中顺利获取页面。

答案3

我在 ubuntu 10.04、wine、IE 6.0 和 squid 2.7 中尝试(系统有一个 dns,而 squid 有其他 dns 服务器)

  1. 用户向代理发送请求
  2. Squid 发送 DNS 请求到 DNS 服务器
  3. Squid 接收 DNS 应答。如果 nxdomain 或其他错误,则向 IE 发送错误页面。如果名称解析成功,则获取页面并将其提供给 IE。

IE 6.0 无法解析 DNS 名称。

答案4

我不这么认为 - 如果您输入 IP 和域在例外列表中,或者域和 IP 在例外列表中,它可能仍会通过代理进行。

proxy.pac/wpad.dat 可能会让您强制摆脱这种行为。

相关内容