HTTP 代理与 Socks5 代理
概述
本文通过实践经历基本的认识 HTTP 代理与 Socks5 代理的用法与理解其精髓。同时也解决 go get 库无法下载的问题。
渐渐
终端走代理我最初接触到的是 HTTP 代理,这篇文章可以见证(代理服务器 | 韶 光)。当然我的这些实践都是基于 shadowsocks 这款产品。随后我又接触了 Socks5 代理,因为简单其更快,又隐隐觉得其更底层,通过以下代码配置:
1 | .zshrc |
仍然要开 全局模式 终端才能走代理。
虽然没有使用 HTTP 代理,但是很长一段时间我都没有关闭 启用 HTTP 代理 这个按钮,直到一天我连接手机热点 shadowsocks 闪退,我才关闭将其关闭了。这更显 Socks5 代理的优秀。
今天
当我重新安装 vim-go,并执行 :GoUpdateBinaries
故事又开始了。
显示类似于如下的一系列报错:
1 | vim-go: Updating guru. Reinstalling golang.org/x/tools/cmd/guru@master to folder /Users/sweeney/Documents/code/go/bin |
首先我对 socks5 是很相信的,天生的认为其是较为底层的代理,应该不存在 HTTP 能代理而 Socks5 不能代理的情况。
“应该” 呵呵,所以我就耗了近一个半小时在这里。
以上问题其实和直接执行 go get golang.org/x/tools/cmd/guru
,然后输出如下错误是一个道理。
1 | unrecognized import path "golang.org/x/tools/cmd/guru": https fetch: Get "https://golang.org/x/tools/cmd/guru?go-get=1": dial tcp 216.239.37.1:443: i/o timeout |
都是 go get 无法从 golang.org 下载包。
虽然 curl golang.org
能够访问这个网站,但是还是无法下载包。
Socks5 vs HTTP
HTTP Proxy | Socks5 Proxy | |
---|---|---|
功能 | http 代理对于使用浏览器上网的用户很重要。 | 并不使用 http 协议,是更通用,更低级别的代理。 |
安全 | 被传输的数据极可能被查看。 | 由于SOCKS无法读取数据,因此查看数据的几率很小。 |
速度 | 速度较慢。 | 通用服务器速度快。 |
连接工具 | 任何工具。 | 有限制工具。 |
建议 | 传输少量数据。 | 传输大体积的速度。 |
SOCKS 作用在 OSI 模型的第四层 —— 会话层上。SOCKS4 只能代理TCP协议,而 SOCKS5 什么协议都可以代理。HTTP工作在应用层上,Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如 FTP、HTTP 和 NNTP 请求),所以Socks代理服务器比应用层代理服务器要快得多。
解决方案
1 | export ALL_PROXY=socks5://127.0.0.1:20808 |
遗留问题
我还是不知道为什么 ALL_PROXY 没对 go get 生效,而 http_proxy 生效了。并且经过测试,不是大小写的问题。
参考文献: