SOCKS5 与 HTTP 代理
这是浏览器用来通过中间节点的两种协议。区别在于中间节点在哪个层面工作。
HTTP 代理能理解 Web 请求:它知道你要去哪里,并且可以处理这些请求。对于加密连接(https://),它会打开一条直通隧道,之后就看不到内容了——只能看到目标地址。
SOCKS5 什么都不理解,也不想理解:它只是在你和目标之间搬运字节。正因如此,不仅是 Web 流量,任何其他协议的流量都能通过它。
| HTTP | SOCKS5 | |
|---|---|---|
| 层面 | Web 请求 | 整个连接 |
| 能看到什么 | 目标地址、请求头(针对 http://) | 除了地址和端口之外什么都看不到 |
| 非 Web 协议 | 不支持 | 支持 |
| 账号和密码 | 支持 | 支持 |
| DNS 由谁解析 | 通常由代理解析 | 取决于设置——这一点很重要 |
实践中真正重要的是什么
第一,DNS。 如果解析网站名称的是你的电脑而不是代理,那么域名查询就会绕过隧道发出去,你的网络运营商就能看到你要去哪里。这并不会直接把你的地址暴露给网站,但这确实是一种泄漏。对 SOCKS5 来说,行为取决于具体设置,所以要检查的是结果,而不是协议的名字。
第二,身份验证。 带账号密码的代理在浏览器里配置起来比不带的更复杂,而这里也正是最容易出问题的地方。
它不是什么
协议的选择几乎从来不是验证码出现的原因。 我们直接验证过这一点:在花一周时间追查一个循环验证码的过程中,我们尝试过的方向里就包括 HTTP 对比 SOCKS。结果没有任何区别——问题实际出在地址本身的信誉上。
所以排查的顺序应该是:先看是什么类型的地址(服务器地址还是家庭地址),再看它实际是从哪里出去的,最后才轮到协议。
该选哪个
如果卖家两种都提供,选哪个都行——在浏览器里你不会察觉出差别。当同一个代理不止浏览器一处需要用到时,SOCKS5 更方便。而在需要身份验证的情况下,HTTP 配置起来稍微简单一些。
更重要的是:在把一个地址分配给某个账号之前,先检查它是否存活、从哪里出去,而不是分配之后再检查。
