使用过海外代理的同学都知道,海外代理的代理服务器支持HTTP和Socks两类协议,其中HTTP具体有HTTP和HTTPS,Socks包含了Socks4、Socks4a、Socks5。 copyright zvvq
并且不少编程语言的网络请求库也支持使用HTTP和Socks协议的代理,那么这两种协议那种速度更快呢?网络上多数文章说Socks因为协议简单所以处理请求更快,结果真的是这样吗? copyright zvvq
前提 本文来自zvvq
由于HTTP1.1的长连接和Socks可以单TCP连接复用,如果是使用一个TCP连接传输多个请求其实HTTP和Socks差别不大;但是在网络爬虫使用代理的情况下,通常都是每个请求都会连接一个TCP连接,所以这里分析的就是HTTP和Socks谁建立代理连接耗时最短 zvvq
HTTP代理 内容来自samhan
HTTP协议即超文本传输协议,是Internet上信息传输时使用最为广泛的一种非常简单的通信协议。 zvvq好,好zvvq
http代理格式http://proxyip:proxyport
copyright zvvq
http
访问的目标网站以http://开头,通常是客户端直接发送http请求到代理服务器,再由代理服务器去掉代理特征然后转发
内容来自zvvq,别采集哟
客户端直接发送真实请求代理服务器收到请求,去除代理特征,解析出目标主机连接目标主机,转发请求https(http connect)
copyright zvvq
访问的目标网站以https://开头,则使用的是http connect方法建立web隧道,通过web隧道传输用户的真实请求数据 内容来自samhan
2021年了,别再问代理是否支持HTTPS了! 内容来自zvvq
客户端发送Connect请求代理服务器收到Connect请求,解析出目标主机连接目标主机,并给客户端发送连接成功报文客户端收到Connection established,开始发送真实请求使用http代理访问https网站,在传输真正的数据之前,需要与代理服务器进行一次“握手”,从而建立连接
zvvq
Socks代理 copyright zvvq
SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS是"Socket Secure"的缩写。这个协议最初由David Koblas开发,而后由NEC的Ying-Da Lee将其扩展到SOCKS4。最新协议是SOCKS5,与前一版本相比,增加支持UDP、验证,以及IPv6。根据OSI模型,SOCKS是会话层的协议,位于表示层与传输层之间。SOCKS协议不提供加密。
socks代理格式:socks5://proxyip:proxyport、socks4/4a://proxyip:proxyport copyright zvvq
socks5 zvvq
客户端发送socks5版本及认证方式代理服务器返回不需要认证客户端发送目标主机信息代理服务器连接目标主机,返回连接成功客户端发送真实请求socks5用户名密码
使用socks5代理可以发现在传输真正的数据之前,需要与代理服务器进行至少两次“握手”,如果使用用户名密码认证,则需要三次“握手”。 内容来自zvvq,别采集哟
socks4/socks4a 内容来自zvvq,别采集哟
客户端发送目标主机信息代理服务器连接目标主机,返回连接成功客户端发送真实请求使用socks4协议相比于socks5协议“握手”流程就简单了许多,与http connect连接一样,只需要与代理服务器之间进行一次“握手”就可以传输数据
结论
zvvq
由于客户端与代理服务器之间的“握手”数据传输在网络中是耗时的,所以“握手次数”越少则单次请求越快
如果访问的目标网站是http://,无疑使用http代理是最快的选择,因为不需要“握手”,代理服务器直接转发用户请求 zvvq
如果访问的目标网站是https://,最快的是http代理(http connect)和socks4代理(不支持用户名密码认证),只需要一次“握手”;最慢的是socks5代理,需要至少进行两次“握手”才能真正传输用户数据。