http 代理 vs. https 代理

2021-11-05 15:39:08 +08:00
 hanssx

起因

小白今天在写 python requests proxies 的时候发现,请求 https 网站一直提示握手失败,部分代码如下

                    requests_proxies = {
                        'http': f"http://{first_proxy}",
                        'https': f"https://{first_proxy}",
                    }
                    last_proxy = s.get('https://ifconfig.me', proxies=requests_proxies, timeout=10).text

,后面才发现本地 clash 开的是 socks5 和 http 代理,没有 https 代理,搜索发现网上有人把 https://改成了 http://,使用 http 代理协议来访问 https 网站可以成功。

学习

于是上网学习一番,发现了下面这两篇文章:(其中第 1 篇文章最主要的是评论部分)

  1. https://www.hitoy.org/difference-between-http-and-https-proxy.html
  2. https://lilywei739.github.io/2017/01/25/principle_for_http_https.html

其中第 1 篇文章评论中有一段

techon 2017-02-16 11:04:51

现在来说

HTTP 代理可以支持 SSL ,能够代理 https 网站

HTTPS 代理一般也支持 http

前者为代理协议,后者是应用协议,不可混同一谈

好像解释了 http 代理协议可以用来访问 https 站点,那么对应第 2 篇文章中的应该就是最后面的图

疑惑

1021 次点击
所在节点    HTTP
2 条回复
AoEiuV020
2021-11-05 15:47:02 +08:00
实际上我就没见过 https 代理,网上的免费代理池试过几个写着 https 代理的节点测试下来也是 http 代理,
asilin
2021-11-05 15:50:06 +08:00
- 早些年之前,HTTP 代理指代理端通过解析客户端传递的 GET/POST 请求,实现 HTTP 层面的代理;
- 后来,HTTP 协议的 CONNECT 方法出现后,客户端就可以通过该方法通过代理端访问任意的 TCP 协议,当然包括 TLS 、HTTPS 等。

为了分区以上两种情况,就有了所谓的 HTTP 代理和 HTTPS 代理。

但是上述两种都有一个问题,即客户端到代理端之间的流量未加密,导致可能被截获、替换等。
为了解决该问题,代理端统一支持之前的两种模式,不再区分,而面向客户端提供了 HTTPS 端口,实现了客户端到代理端的信息加密,也就是后来的 HTTPS 代理。

所以,对于 HTTPS 代理这个概念,可以根据上下文来分析,可能指的是代理端支持代理 https 请求,也可能指的是代理端支持通过 https 请求自身。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/813303

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX