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(R)的原理:
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。
可見,因為ss本地Windows客戶端(相當於本地代理服務器)不支持HTTPS協議,因此不會響應Client hello