如何强制 Web 浏览器发送 HTTP CONNECT 请求

如何强制 Web 浏览器发送 HTTP CONNECT 请求

当我们使用HTTP代理时,我们可以使用它来访问带有https的网站。在普通的http代理中,浏览器以明文形式发送HTTP GET。HTTP代理解析HTTP GET请求HOST行以了解浏览器要访问哪个网站。

由于普通的https,浏览器发送HTTP GET是密文的,代理无法知道浏览器要访问哪个目的地,所以当浏览器设置了HTTP代理后,浏览器发送的HTTP CONNECT请求是明文的HOST

现在我有一个代理,它背后隐藏着几个 Web 服务器。它们都有不同的 IP。只有代理知道它们的 IP。每个服务器都有一个域名。例如,myproxy.com、server1.myproxy.com、server2.myproxy.com……但是当浏览器对这些域名进行 DNS 查询时,返回的 IP 是代理的 IP。

当浏览器想要以 http 方式访问 server1.myproxy.com 时,它会进行 DNS 查询并获取代理的 IP。然后它通过 TCP 连接到代理并发送 HTTP GET 请求。代理可以解析 HTTP 请求以了解浏览器想要访问哪个 Web 服务器。

但是如果浏览器想要以 https 访问 server1.myproxy.com,由于浏览器未将代理设置为默认代理,因此它不会发送 HTTP CONNECT 请求。因此在我看来,代理无法知道浏览器想要访问哪个 Web 服务器。

有什么方法可以让代理知道浏览器想要访问哪个 Web 服务器?即如何强制浏览器发送 HTTP CONNECT 请求?谢谢!

答案1

没有办法告诉浏览器它连接的服务器实际上是代理。浏览器只有CONNECT在知道代理的情况下才会使用代理(通常通过本地配置)。

您要做的是终止HTTPS负载均衡器处的连接,然后仅在负载均衡器和服务器场之间交谈 HTTP(或不同的 HTTPS 连接)。

为了实现这一点,负载均衡器需要具有多个服务器名称的证书(通常称为Subject Alternate Names;最好)或 SSL/TLS server name indication(这还不能在所有浏览器上可靠地工作)。

相关内容