HTTP/HTTPS/SOCKS 代理指的是客户端连接代理服务器的协议,指客户端和代理服务器之间交互的协议。
如服务器支持代理HTTP协议就叫HTTP代理服务器,支持代理SOCKS协议就叫SOCKS代理服务器。如代理服务器同时支持代理HTTP/SOCKS协议,则既可以叫HTTP代理服务器,也可以叫SOCKS服务器。
补充:SOCKS协议工作在比HTTP、HTTPS更低的层次,所以HTTP协议,HTTPS协议可以使用SOCKS代理(即HTTP、HTTPS协议和代理服务器之间可以采用SOCKS协议),但反过来,SOCKS协议就不能通过HTTP/HTTPS来代理了。
注意和IE浏览器中代理(即系统代理)设置是不一样的概念!
这里IE的代理意思是,配置哪种协议走哪个代理服务器(注意并不是什么协议代理服务器,IE仅支持HTTP代理)。比如你这里配的是让HTTP协议走HTTPS代理服务器(这里的HTTPS代理服务器指仅支持代理HTTPS,不支持代理其他协议如HTTP),那么HTTP协议将不能够被代理成功。
其实,IE的代理设置都只支持HTTP代理
的。上图中无论怎么设置,都是使用HTTP协议直接转发到对应的代理服务器,也就是代理服务器必须是支持代理HTTP协议的服务器(代理服务器支持其他协议比如HTTPS也是多余的,并不会使用HTTPS代理)。这里大家可能会有疑问,那HTTP代理服务器是如何可以代理HTTPS协议的呢?其实是用了HTTP隧道(HTTP tunnel)(感兴趣请自己查阅相关资料),客户端和HTTP代理服务器之间并没有进行HTTPS的握手过程。
上面说了,IE代理仅支持HTTP代理,谷歌浏览器Chrome代理配置也只能是配置IE代理,也就是只能使用HTTP代理了。那比如我想使用HTTPS代理怎么办(客户端和HTTPS代理服务器之间采用HTTPS协议)?
可以使用插件Proxy SwithchyOmega:
“网址协议”就是IE代理设置里的“类型”,和IE代理相比,多了个“代理协议”选项,即什么协议走什么代理选项。
比如可配置HTTP/HTTPS协议走SOCKS5协议代理。其实这插件也是调用了chromium提供的接口(https://www.chromium.org/developers/design-documents/network-stack/socks-proxy):
可看出FTP协议通过SOCKS协议代理还没有实现。。
最后说下ss的原理:
ss的运行原理与其他代理工具基本相同,使用特定的中转服务器完成数据传输。在服务器端部署完成后,用户需要按照指定的密码、加密方式和端口,使用客户端软件与其连接。在成功连接到服务器后,客户端会在用户的电脑上构建一个本地Socks5代理
。浏览网络时,网络流量会被分到本地socks5代理,客户端将其加密之后发送到服务器,服务器以同样的加密方式将流量回传给客户端,以此实现代理上网。
有人会问,ss(R)是Socks5代理,但我上面说了IE代理(不安装Proxy SwithchyOmega情况下)只支持HTTP代理,为什么也可以访问google呢?
其实ss(R)默认在1080
端口开启了Socks5代理
,但是它为了兼容HTTP代理
模式,会使用ss_privoxy.exe
开启了一个HTTP代理(随机端口,返回拒绝则默认8123端口。
不仅如此,ss(R)在1080端口也支持HTTP代理。
我们知道,IE的代理设置是仅支持HTTP代理
的。也正是因为ss(R)支持HTTP代理
方式,才能使IE以及一些其他不支持Socks5代理
(但支持HTTP代理
)的软件进行代理。
浏览器一般会自动启用系统代理
,而其它软件则需要自身支持HTTP代理
或Socks5代理
,而且一般需要进行手动配置才可以进行代理。
补充:分别使用HTTP协议和SOCKS5协议访问ss本地Windows客户端情况(注:事先要下载curl小工具):
可看出,HTTPS协议使用HTTP代理是通过了HTTP隧道。
注:
socks5 和 socks5h 的区别仅用于 curl。在 curl 中,socks5 会使用本地DNS,socks5h 会使用代理提供的远程DNS。
在其它软件中,socks5h 基本不起作用,使用 socks5 即可。一旦设置了代理,多数时候会采用远程DNS。
但使用 HTTP/HTTPS 类型的代理服务器时,本地的 DNS 解析、缓存、 hosts 文件等都不使用,与本地设置的 DNS 服务器地址无关。DNS 解析完全在代理服务器上进行。浏览器本身甚至无须知道最终服务器的 IP 地址。据我所知,此行为无法通过浏览器选项等更改。——https://github.com/FelisCatus/SwitchyOmega/issues/963
补充:
可见,因为ss本地Windows客户端(相当于本地代理服务器)不支持HTTPS协议,因此不会响应Client hello