Nginx-Caddy之HTTP-HTTPS代理区别

本文首发于个人博客,文章链接为:https://blog.d77.xyz/archives/6fb5f2d2.html

偶然的机会,发现 HTTP 代理和 HTTPS 代理这两个词,没接触过 HTTPS 代理,所以动手查了查,记录一下。

HTTP 代理

普通的 HTTP 代理是将浏览器发出的 HTTP 请求直接发送到代理服务器,然后代理服务器将 HTTP 请求进行解析,添加对应的源 IP(这里不考虑高匿代理),根据代理服务器的不同会对请求头进行不同的修改,然后将修改后的请求头和请求体一起发送到对应的服务器,然后等待服务器回复,将服务器返回的 HTTP 请求转发给客户端,完成代理任务。在这种情况下,HTTP 请求存在数据被代理服务器修改的情况,如果连接的是一个恶意的代理服务器,那么就可能存在数据泄露,隐私泄露等情况。使用 HTTPS 协议来访问对应服务器就可以避免这种问题。

为了确保数据的安全,HTTPS 请求的域名和端口都是加密的,所以代理服务器无法进行解析,也就无法修改对应的请求体,无法进行正常的 HTTP 转发任务。为了解决这个问题,就需要用到 CONNECT 方法。

  1. 当使用设置了代理服务器的浏览器发送 HTTPS 请求时,浏览器会先发送 CONNECT 包(未加密的)到代理服务器。
 CONNECT www.microsoft.com:443 HTTP/1.0
 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
 Host: www.microsoft.com
 Content-Length: 0
 DNT: 1
 Connection: Keep-Alive
 Pragma: no-cache
  1. 代理服务器根据包中的内容,会在对应端口上和目标站点就建立一个 TCP 连接,建立成功后,会给客户端返回一个 HTTP 200 的状态码告知已连接成功。
 HTTP/1.0 200 Connection Established
 FiddlerGateway: Direct
 StartTime: 11:56:22.008
 Connection: close
 EndTime: 11:56:22.538
 ClientToServerBytes: 1416
 ServerToClientBytes: 1358
  1. 之后浏览器会和目标网站进行正常的 HTTPS 握手请求,建立 TLS 隧道,并交换加密数据,代理服务器只会进行数据的转发,不会读取数据包中的内容,因为数据是加密的,所以想读取也是读取不了的。通过下图的抓包可以看出来,在进行了 TCP 三次握手之后,浏览器发送了 CONNECT 请求到代理服务器,之后代理服务器返回了 HTTP 200 的状态码告知已连接成功,然后浏览器开始和目标网站进行正常的 TLS 握手过程。

<

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值