我在网上搜索了关于http代理的内容。 我读了一些关于代理服务器的维基文章。 但是我仍然不明白http代理是如何工作的,我太蠢了。
这是我对http代理工作原理的假设: 如果我将http代理设置为特定的代理,比如Proxy_A,那么当我启动Chrome/IE并输入一个特定的URL,比如URL_A,Chrome/IE是否会直接将请求发送到Proxy_A, 然后Proxy_A将请求发送到URL_A的真实服务器?
我在网上搜索了关于http代理的内容。 我读了一些关于代理服务器的维基文章。 但是我仍然不明白http代理是如何工作的,我太蠢了。
这是我对http代理工作原理的假设: 如果我将http代理设置为特定的代理,比如Proxy_A,那么当我启动Chrome/IE并输入一个特定的URL,比如URL_A,Chrome/IE是否会直接将请求发送到Proxy_A, 然后Proxy_A将请求发送到URL_A的真实服务器?
HTTP代理使用HTTP协议,专门用于HTTP连接,但也可以被滥用于其他协议(这已经成为一种标准)。
浏览器(客户端)向代理发送GET http://SERVER/path HTTP/1.1
请求。
现在代理将实际请求转发给服务器。
服务器只会将代理视为连接并像对待客户端一样回答代理。
代理接收响应并将其转发回客户端。
这是一个透明的过程,几乎就像直接与服务器通信一样,因此对于浏览器来说只是一个微小的开销来实现HTTP代理。
还有一些额外的头可以发送以识别客户端,揭示他正在使用代理。
代理有时会在数据流中更改/添加内容,以实现各种目的。
例如,某些代理在特殊的HTTP HEADER中包含您的真实IP地址,该地址可以在服务器端记录或在其脚本中拦截。
CLIENT <---> PROXY <---> SERVER
更新:
与使用代理作为安全/隐私功能相关
正如您在上面的ASCII图中所看到的,客户端和服务器之间没有直接通信。双方只是通过它们之间的代理进行交流。
在现代世界中,客户端通常是浏览器,服务器通常是Web服务器(例如Apache)。
在这样的环境中,用户经常信任代理是安全的,并且不会泄露他们的身份。
但是,由于运行在浏览器上的复杂软件框架,有许多可能破坏此安全模型的方法。
例如,Flash或Java小程序就是一个完美的例子,说明代理连接可能会断开。 Flash和Java都可能不太关心其父应用程序(浏览器)的代理设置。
另一个例子是DNS请求,根据代理和应用程序设置,可以在不使用代理的情况下到达目标名称服务器。
另一个例子是cookie或您的浏览器元数据足迹(分辨率、响应时间、用户代理等),如果Web服务器已经认识您(或者在没有代理的情况下再次遇到您),这两个示例都可能识别您。
最后,代理本身需要得到信任,因为它可以读取通过它传输的所有数据,并且还可能能够破解您的SSL安全性(请阅读有关中间人攻击的内容)。
如何获取代理
代理可以作为服务购买,扫描获取或自行运行。
公共代理
这些是最常用的代理,而通常的术语“公共”相当误导。
更好的术语应该是“开放代理”。如果您运行没有防火墙或身份验证的代理服务器,则全球任何人都可以找到它并滥用它。
大多数销售代理的公司只是扫描互联网寻找此类代理,或者他们使用被黑客攻击的Windows计算机(僵尸网络)并将其出售以进行大多数非法/垃圾邮件活动。
大多数现代国家认为在未经授权的情况下使用开放代理是一种滥用行为,这是很常见的事情,但实际上可能会导致监禁。
可以通过搜索开放端口来扫描代理,典型的免费程序是https://nmap.org
作为谨慎之言:较大规模的扫描几乎肯定会使您的互联网连接被您的ISP禁止。
2) 付费黑客(僵尸网络)代理
这些代理滥用计算机,主要是物联网或Windows桌面作为代理主机。攻击者大规模使用它们进行各种非法目的。
卖家通常将它们称为“住宅代理”,以隐藏它们的非法性质。
使用这样的代理毫无疑问是非法的,被滥用的用户可以轻松记录“您”的IP,包括劫持您连接到目标的可能性。
根据来源,这些IP可能没有列入黑名单,因此“质量”比公共代理好得多。
3) 付费共享代理
这些是数据中心代理,通常合法并具有快速上行链路。
由于存在大量的电子商务垃圾邮件,这些IP经常被滥用,并且通常会被列入黑名单。
典型用途是规避Craigslist限制或地理限制。
4) 付费私人/专用代理
“私人”表示专用。如果运营商是专业的,则意味着您的代理不与其他人共享。
这些通常用于更专业和合法的活动,特别是当代理IP租用时间较长时。
著名的运营商包括https://us-proxies.com。
自己的代理
也可以运行自己的代理,有各种开源项目可用。
最常用的代理服务器是https://squid-cache.org。
GET http://SERVER/path HTTP/1.1
到PROXY”。或者...其他什么。 - Lee Richardson除了John上面的精彩回答之外,还有一个重要的步骤是PROXY和CLIENT之间的初始连接握手。参见Websocket RFC。
CONNECT example.com:80 HTTP/1.1
Host: example.com
这是客户端用来打开SSL隧道的相同请求,本质上使用代理