HTTP代理和SOCKS5代理的区别
协议本质区别
- HTTP 代理:基于 HTTP 协议工作,最初设计用于转发 Web 流量,对 HTTP/HTTPS 协议的兼容性较好,但处理其他协议时可能存在局限。
- SOCKS5 代理:是更底层的代理协议,不依赖具体应用层协议,能转发几乎所有类型的网络流量(包括 HTTP、HTTPS、FTP 等),通用性更强。
在 Git 场景中,两者都能实现代码拉取 / 推送的代理功能,但 SOCKS5 通常表现更稳定,尤其是在处理复杂网络请求时。
不建议同时配置
在 Git 的配置文件中,如果对同一协议(如 [http] 或 [https])同时设置多个 proxy 项,Git 只会生效最后一个配置,前面的配置会被覆盖。
[http]
proxy = socks5://127.0.0.1:10808 # 这行会被下一行覆盖
proxy = http://127.0.0.1:10809 # 实际生效的配置
这种情况下,同时配置不仅没有意义,还可能因配置冲突导致代理无法正常工作。
Git仓库拉取时的HTTP、HTTPS和SSH的区别
协议本质与连接方式
- SSH(Secure Shell)
基于 SSH 协议的加密网络传输,通过密钥对进行身份验证,无需每次输入密码。连接格式通常为:git@github.com:用户名/仓库名.git - HTTP/HTTPS
基于超文本传输协议(HTTP),HTTPS 是 HTTP 的加密版本(通过 SSL/TLS 加密)。连接格式通常为:- HTTP:
http://github.com/用户名/仓库名.git(不推荐,明文传输,安全性低) - HTTPS:
https://github.com/用户名/仓库名.git(主流推荐,加密传输)
- HTTP:
| 维度 | SSH | HTTPS | HTTP |
|---|---|---|---|
| 认证方式 | 依赖 SSH 密钥对(公钥存 GitHub,私钥存本地) | 依赖用户名 + 密码,或 Personal Access Token(PAT) | 同 HTTPS,但无加密,已被 GitHub 逐步淘汰 |
| 安全性 | 高(全程加密,密钥不易泄露) | 高(传输加密) | 低(明文传输,已不推荐) |
| 使用复杂度 | 首次配置稍复杂(需生成 / 上传密钥) | 简单(直接输入账号密码或 PAT) | 简单,但安全性差 |
| 权限管理 | 基于密钥授权,可精细控制(如部署密钥) | 基于账号权限,适合普通用户 | 同 HTTPS,但不安全 |
| 适用场景 | 频繁操作(如开发机)、自动化脚本 | 偶尔操作、临时克隆、对安全性有要求 | 几乎不适用,仅历史兼容 |
Git配置代理
SSH代理
- 在
C:\Users\UserName\.ssh路径下面创建文件config文件。 - 复制下面的内容。
# 必须是 github.com
Host github.com
HostName github.com
User git
# 走 HTTP 代理
# ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=10808
# 走 socks5 代理(如小飞机 or V2xxx)
# ProxyCommand nc -v -x 127.0.0.1:10808 %h %p
# 对于 Windows 用户,要使用 socks5 代理却没有 nc 的用这个
ProxyCommand connect -S 127.0.0.1:10808 %h %p
-S为socks,-H为HTTP
%h:表示目标主机名(HostName),在你的配置中就是github.com
%p:表示目标端口号,SSH 协议默认端口是22(可省略,默认就是 22)
如果上面的不生效可以在试试下面的
# 对 GitHub 的 SSH 连接启用代理
Host github.com
HostName ssh.github.com
Port 443
User git
# 若使用 SOCKS5 代理(如 v2rayN 的 10808 端口)
ProxyCommand connect -S 127.0.0.1:10808 %h %p
GitHub 除了默认的 SSH 端口 22,还支持通过 443 端口 进行 SSH 连接(域名是 ssh.github.com)。
这种配置的优势是:很多网络环境会封锁 22 端口,但通常会开放 443 端口(HTTPS 常用端口),因此用 443 端口更容易绕过网络限制。
注意事项:
- 必须同时指定
HostName ssh.github.com和Port 443,否则 443 端口不会生效 - 这种方式本质还是 SSH 协议,只是改用了 443 端口,代理配置逻辑和之前一致
- 测试是否生效的命令依然是:
ssh -vT git@github.com
HTTP、HTTPS代理
临时设置
打开 Git Bash,使用命令临时设定socks代理:
git config --global http.proxy 'socks5://127.0.0.1:socks5端口号'
git config --global https.proxy 'socks5://127.0.0.1:socks5端口号'
或者http代理:
git config --global http.proxy 'http://127.0.0.1:http端口号'
git config --global https.proxy 'https://127.0.0.1:https端口号'
永久设置
若想要设置代理永久生效,则可以把它写入 .gitconfig 文件中。
[http]
proxy = socks5://127.0.0.1:socks5端口号
proxy = http://127.0.0.1:http端口号
[https]
proxy = socks5://127.0.0.1:socks5端口号
proxy = https://127.0.0.1:http端口号