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

ora*_*ius 26 domain-name-system http proxy

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

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

任何反馈将不胜感激。

Tri*_*anK 27

不完全是:这取决于客户端的配置方式。让我们使用 IE 作为基本示例。

如果您使用显式代理配置 IE :例如没有勾选其他选项,代理设置为 something:8080。

  1. 用户输入地址

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

    一种。如果它匹配Bypass list中的条目,则客户端使用自己的 DNS来解析名称,然后客户端直接连接到端口 80(假设)上的目标 IP 地址,然后发送如下请求:

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

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

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

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

    额外的事实:在 URL 中使用FQDN是一种方式,您可以告诉客户端认为它正在与代理而不是真正的 Web 服务器交谈

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

使用 WPAD/PAC 时:

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

  1. 用户输入地址

  2. 客户端从其配置的位置下载当前的wpad.dat/autoproxy.js/.pac文件

  3. 客户端在js文件中查找函数“ FindProxyForUrl ”,并执行

  4. Autoproxy 脚本处理主机名URL。这是一个功能有限的 javascript 文件,但仍有很多事情是可能的:

    一种。这可能包括名称解析(IsInNet、DnsResolve)

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

    C。这可能包括数到一百万(i++)

    d. 如果管理员是个混蛋,这可能包括narky 警报弹出消息

    • (或只是有趣)
    • ((或调试))
  5. FindProxyForUrl至少一个字符串函数返回最佳的代理来使用的有序列表(分号分隔):

    一种。要么"DIRECT",在这种情况下,客户端需要自己解析名称并直接连接,如上面的 Bypass 案例

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

    • 作为一个例子:如果脚本函数返回“PROXY yourProxy:8080; DIRECT”,告诉客户端连接到yourproxy TCP端口8080来请求该URL,如果连接不能建立,尝试将直接。 请注意,TCP 会话设置失败并不是很快,因此对于用户来说,这不太可能是一种愉快的故障转移体验,但也无济于事。也许。

偶尔会有小故障、微妙之处和无法解释的行为,但在大多数情况下,当事情没有以奇怪和有趣的方式被破坏时,以上是我多年来看到它的工作方式。较新的浏览器正在优化行为,并行化内容,并一直在尝试有趣的事情,因此请查看给定浏览器的最新文档以了解详细信息。

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

如果您对 Winsock 代理客户端(来自 TMG/ISA Server)感兴趣,那就是另一回事了,它具有更多的灵活性和移动部件。这里介绍的太多了,但是有一些文档描述了它是如何工作的。简而言之:它插入 Windows Sockets,可以拦截基于 TCP/UDP 的流量和基于每个应用程序和每个用户的名称解析请求。非常强大,但现在也已弃用,并且已经几年没有更新了。

客户可能真的很粘人:

一个最后要注意:一旦一个HTTP客户端已决定跟一个代理指定网站/ URL,也没有办法为代理告诉它不要

没有 HTTP 状态代码或标头“我不提供它,你应该直接转到它”......

一旦客户端决定一个特定的 URL 是代理服务的,代理死亡控制随之而来。

避免它的唯一方法是在客户端建立连接之前,在 PAC 或旁路列表中获取选择逻辑。

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

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


Jam*_*yan 1

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