我最近参加了有关客户端从代理服务器请求页面时会发生什么的讨论。我只是想确保我对这种事件顺序的理解在一般情况下是正确的:
- 用户请求网站
- 客户端将DNS请求发送到其配置的DNS服务器,以解析目标IP地址(首先完成此操作是为了适应配置为绕过代理的HTTP请求)
- 从DNS接收到目标IP后,并且在发送HTTP请求之前,将根据例外列表检查该请求
- 如果目标服务器不在例外列表中,则请求将转发到代理服务器。
- 如果目标服务器在例外列表中,则根据客户端计算机的路由表转发请求。
任何反馈将不胜感激。
我最近参加了有关客户端从代理服务器请求页面时会发生什么的讨论。我只是想确保我对这种事件顺序的理解在一般情况下是正确的:
任何反馈将不胜感激。
Answers:
不完全是:这取决于客户端的配置方式。让我们以IE为例。
如果使用显式代理配置IE :例如,未勾选任何其他选项,则代理设置为something:8080。
用户输入地址
IE会根据IE代理例外列表检查地址是否有字符串匹配(即“绕过这些地址的代理:”)
一种。如果与“ 旁路”列表中的条目匹配,则客户端使用其自己的DNS来解析名称,然后客户端直接连接到端口80(假定)上的目标IP地址,然后发送如下请求:
GET /something.htm HTTP/1.1
Host: fulldomainame.example.com
b。如果没有旁路列表条目匹配,请继续:
IE连接到其配置的代理,并发送以下形式的请求:
GET http://fulldomainname.example.com/something.htm HTTP/1.1
额外的事实:在URL中使用FQDN是一种可以告诉客户端认为客户端正在与代理而不是真正的Web服务器通信的方法
代理使用自己的 DNS 解析该主机名,然后连接到目标站点(类似于上述步骤2中的客户端),等等。
使用WPAD / PAC时:
如果使用的是Web代理自动发现(WPAD)或代理自动配置(PAC或自动配置)脚本,例如启用自动配置时ISA / TMG提供的脚本,则有所不同:
用户输入地址
客户端从其配置位置下载当前wpad.dat / autoproxy.js / .pac文件
客户端在js文件中查找函数“ FindProxyForUrl ”并执行
Autoproxy脚本处理主机名和URL。这是功能有限的javascript文件,但仍有许多可能:
一种。这可能包括名称解析(IsInNet,DnsResolve)
b。这可能包括字符串匹配(ShExpMatch)
C。这可能包括数以百万计(i ++)
d。如果管理员是个混蛋,这可能会包括晦涩的警报弹出消息
该FindProxyForUrl至少一个字符串函数返回最佳的代理来使用的有序列表(分号分隔):
一种。要么是“ DIRECT”,在这种情况下,客户端需要根据上面的“绕过”情况自行解析名称并直接连接
b。或“ PROXY proxyname:8080”或类似的名称,在这种情况下,客户端连接到该代理上的该端口,告诉客户端获取完整的URL,然后代理执行名称解析。
偶尔会有小故障,微妙之处和无法解释的行为,但是在大多数情况下,如果事情没有以怪异和有趣的方式被破坏,以上就是我多年来看到它的方式。较新的浏览器一直在优化行为,并行化内容以及一直尝试有趣的事情,因此请查看给定浏览器的最新文档以了解详细信息。
WinSock代理/ ISA防火墙客户端/ TMG客户端:
如果您对Winsock代理客户端(来自TMG / ISA Server)感兴趣,那就不一样了,它具有更多的灵活性和可移动的部分。这里太多了,但是周围有一些文档描述了它是如何工作的。简而言之:它插入Windows套接字,并且可以基于每个应用程序和每个用户拦截基于TCP / UDP的流量和名称解析请求。功能强大,但现在已弃用,并且几年未更新。
客户可能真的很狡猾:
一个最后要注意:一旦一个HTTP客户端已决定跟一个代理指定网站/ URL,也没有办法为代理告诉它不要。
没有用于“我不提供服务,您应该直接转到它”的HTTP状态代码或标头...
一旦客户端确定特定的URL由代理服务,便会发生proxy-death-grip。
避免这种情况的唯一方法是在PAC或“旁路”列表中,在客户端建立连接之前就获得选择逻辑。
有关区域和PAC文件的最终说明
IE将直接连接的站点(即使它们在URL中包含点)视为本地Intranet区域的一部分(默认情况下,可以在“区域”属性中设置),因此将执行诸如允许对这些站点进行集成Windows身份验证的操作(即Kerberos和/或NTLM身份验证,透明地)。因此,控制某项内容是否在本地Intranet区域中可以定义其在自动身份验证方面的信任程度。同样,至少默认情况下。
我不确定您的DNS部分是否正确。我见过没有有效DNS服务器的计算机可以使用代理在IE中正常获取页面。