http_proxy 和 https_proxy 的区别

Con*_*edP 8 proxy environment-variables http-proxy

我想了解 http_proxy 和 https_proxy 环境变量之间的区别。

所以我的理解是,如果我(作为客户端)发送 http 请求,将使用 http_proxy。如果我(作为客户端)发送 https 请求,将使用 https_proxy。

有一些可能的设置来设置 http_proxy 和 https_proxy:

1. http_proxy = http://proxy:port
2. https_proxy = http://proxy:port
3. http_proxy = https://proxy:port
4. https_proxy = https://proxy:port
Run Code Online (Sandbox Code Playgroud)

据我了解,变体 1、2 可能是常见设置。变体 3 怎么样,它是一种可能的设置吗?请求是如何传输的?我认为4也是一个可能的设置,但我不清楚工作流程。

这是我的猜测:

在第一个设置中,如果我向目标服务器发送 http 请求,则将使用 http_proxy,使用此设置,请求将作为客户端发送 --(http 请求) --proxy --(http 请求) -- 服务器

在第二个设置中,如果我向目标服务器发送 https 请求,则将使用 https_proxy,使用此设置,请求将是客户端 --(https 请求)-- 代理 --(https 请求) --server。在这种情况下,代理只会将加密的数据包传输到服务器,数据包只会在服务器端解密。

在第三种设置中,如果我向目标服务器发送 http 请求,使用此设置,会发生什么?它是一个合格的设置吗?

在第四个设置中,如果我向目标服务器发送 https 请求,则将使用 https_proxy,使用此设置,请求将通过客户端发送 --(https 请求) --proxy --(https 请求) -- 服务器. 在这种情况下,这是否意味着客户端的 https 请求使用代理的公钥加密,哪个代理首先解密请求,然后使用目标服务器的 pk 加密,然后将请求转发到服务器?然而,在这种情况下,它是不是打破了客户端和服务器之间的端到端加密?如果我的假设是错误的,那么此设置的正确图片是什么?

具体来说,我想知道从客户端 - 代理 - 服务器使用不同代理(http/https)和代理设置(使用 http_proxy/https_proxy 设置)的数据包流的工作流程。

在所有情况下,我假设服务器可以接受 http/https 请求。如果服务器只接受 http/https 请求呢?上述设置会发生什么以及它们将如何被激活?我对他们没有清晰的印象。

Cpp*_*oob 8

我认为你的图片是完全正确的。

http_proxy / https_proxy 都应该指向可以代理上游请求的代理服务器。http_proxy将用于纯 http 请求,这意味着从客户端到代理的流量将是未加密的。https_proxy用于 https 请求。在这两种情况下,客户端首先都会向代理发送针对特定上游的 HTTP CONNECT 请求(这会导致在代理和上游之间创建 TCP 隧道),然后发送实际的有效负载。实际的有效负载可以是明文或 TLS 加密的,由代理直接从客户端中继到上游,而无需解密数据包。代理与上游建立 TCP 连接。从那时起,代理通过此连接将来自客户端的每个请求直接中继到上游,并同样将每个响应传递回客户端。这意味着,代理处不会发生 TLS 终止或发起 - 它完全不知道内容。

您可以拥有启用 TLS 的转发代理服务器,但机制略有不同。通过http_proxyhttps_proxy,您的客户端可以了解代理的存在,并适当更改 HTTP 请求以使其适合代理。支持 TLS 的转发代理通常是透明的。它们解密客户端请求(TLS 终止),在适用时使用标准客户端凭据向服务器发起新的 TLS 请求,然后在对请求/响应应用一些安全策略后将响应转发回客户端。http_proxy/环境变量https_proxy不直接发挥作用 - 也不涉及 HTTP 隧道(通过 HTTP CONNECT 或其他方式)。

此外,还有另一个环境变量 - NO_PROXY - 可以将其设置为以逗号分隔的地址列表,不应代理对其的请求。


Tim*_*ler 5

简而言之,http_proxy和 都https_proxy支持HTTPHTTPS请求的代理。

不同之处在于http_proxy客户端和代理之间的数据传输不加密,而加密https_proxy。所以 https_proxy 代理本身需要一个 TLS 证书。

一般来说,http_proxy对于本地网络就足够了。如果您https_proxy使用仅支持 的代理设置变量http_proxy,则连接将无法正常工作。


因为没有统一的规定,对于http_proxyhttps_proxy变量,不同的程序可能做不同的事情。

为了兼容不同的应用程序,我们可能会添加不同的样式,但实际上,只要应用程序能够识别以下其中一项,代理就应该正常工作(HTTP 和 HTTPS 请求)。