不少新手初次接触代理时,会把HTTP代理和HTTPS代理当成两种完全独立的工具,认为HTTP代理只能访问HTTP网站,HTTPS代理只能访问HTTPS网站。这个理解不完全错误,但漏掉最核心的差异点:二者的区分不在于能访问什么网站,而在于代理服务器能否读取传输的数据。
HTTP代理的工作逻辑如下。浏览器或程序填写代理地址、端口,访问http://开头的普通网站。浏览器把完整请求发送给代理服务器,请求行携带目标地址,类似GET http://example.com/index.html HTTP/1.1,附带各类请求头。代理服务器接收请求,代为访问目标站点,再把返回内容转发回客户端。整个过程中,代理服务器能够看到访问页面、提交表单、Cookie内容以及搜索关键词。它相当于中间人,所有传输明文都可以被读取。很多企业内网使用HTTP代理管控上网行为,依靠的就是这个特性,实现访问记录、内容过滤、页面缓存。缓存也是HTTP代理的优势,多人访问同一页面,代理可以直接返回本地缓存副本,不用重复请求源站。

HTTPS代理的工作模式完全不同。访问https://站点时,浏览器不会把完整请求内容发送给代理。浏览器先向代理发送CONNECT请求,格式类似CONNECT example.com:443 HTTP/1.1。这条请求的含义是请求代理建立通往example.com 443端口的TCP隧道。代理许可后返回200 Connection Established,浏览器和目标服务器开启TLS握手。从这个阶段开始,代理服务器只负责在两个套接字之间转发加密字节。代理能获知通信的域名、IP、端口,传输数据量和连接时长,但无法读取具体访问页面、表单内容、Cookie信息。这些数据封装在TLS加密层内,代理没有私钥,无法解密。
两者最核心差别可以概括为:HTTP代理可以读取明文内容,HTTPS代理仅能获取连接元信息。这个差异直接决定适用场景与安全风险。使用来路不明的HTTP代理,访问HTTP站点的全部内容都会被代理运营方查看,包含登录表单账号密码。HTTPS代理即便运营方想要查看数据,没有中间人证书就无法解密。当然如果在本地安装代理根证书,实现中间人解密,属于企业监控方案,普通公共代理做不到。
还有一处容易混淆的概念,就是代理服务器自身通信协议。部分代理支持HTTPS代理协议,代表客户端和代理服务器之间使用TLS加密通信,代理再转发请求。这种配置安全性更高,但部署复杂,代理服务器需要证书,客户端也需要信任证书。日常大家口中提到的HTTPS代理,大多不是这种模式,而是支持CONNECT方法、能够转发HTTPS流量的HTTP代理。客户端和代理服务器之间依旧是普通HTTP通信,客户端和目标网站之间才是TLS加密。很多代理服务商开放同一端口同时支持HTTP、HTTPS代理,访问HTTP网站走普通转发,访问HTTPS网站自动发送CONNECT请求。
端口没有强制标准。HTTP代理常用8080、3128、8888端口,HTTPS代理也经常使用这些端口,本质是同一个代理服务监听端口。CONNECT请求目标端口一般是443,也存在8443这类自定义端口,取决于网站配置。认证方式上,HTTP代理依靠Proxy-Authorization请求头携带账号密码,HTTPS代理发送CONNECT请求时可以附带相同认证头,代理校验通过才建立隧道。认证流程只在隧道建立前执行,隧道创建完成后代理不再干预数据传输。
性能层面,HTTP代理支持缓存,静态资源较多的网站加速效果明显。HTTPS代理无法缓存,每次请求都回源,延迟相对更高。不过现代浏览器和CDN承担大部分缓存工作,实际使用时差距并不突出。真正影响体验的是代理服务器带宽与线路质量,协议本身带来的性能开销很小。
配置代理遇到可以打开HTTP网站、无法访问HTTPS网站的情况,大概率是代理不支持CONNECT方法。老旧或者功能受限代理只实现普通转发,收到CONNECT请求直接拒绝。更换支持CONNECT的代理即可,和代理自身是否启用加密没有关系。
顺带提一下SOCKS代理。它和HTTP代理不属于同一层级,SOCKS运行在传输层,不区分上层协议,HTTP、HTTPS、FTP全部当作TCP流处理。SOCKS5额外支持UDP流量,适合游戏、P2P业务。如果想要全部流量走代理,不需要内容过滤、缓存、访问日志,SOCKS会更省心。但如果需要按域名设置访问规则、缓存页面、记录访问日志,HTTP代理和HTTPS代理会更加合适。