HTTP_PROXY 环境变量的“正确”格式是什么?上限还是不上限?

HTTP_PROXY 环境变量的“正确”格式是什么?上限还是不上限?

http_proxy和两种情况我都遇到过HTTP_PROXY。两种形式等价吗?其中一个优先于另一个吗?

答案1

在应用程序可以使用环境变量之前,没有中央机构为其指定官方含义。POSIXPATH定义了一些变量( , ,...)的含义TERM,并以非规范的方式列出了其他几个常用的变量,全部为大写。http_proxy而朋友不是其中之一。

与许多应用程序使用的基本上所有常规环境变量不同,http_proxyhttps_proxy和通常是小写的。我不记得有任何程序只能理解大写字母,我什至找不到一个尝试大写字母的程序。许多程序仅使用小写变量,包括 lynx、wget、curl、perl LWP、perl WWW::Search、python urllib/urllib2 等。因此,对于这些变量,正确的形式是小写形式。ftp_proxyno_proxy

小写名称至少可以追溯到CERN libwww 2.151994 年 3 月(感谢 Stéphane Chazelas 找到了这个)。我不知道是什么促使选择小写字母,即使在当时这也是不寻常的。

答案2

没有标准,根据应用程序使用大写和小写版本(另请参阅 HTTPS_PROXY、ALL_PROXY、NO_PROXY)。

例如:

卷曲

ENVIRONMENT VARIABLES

  Curl reads and understands the following environment variables:

        http_proxy, HTTPS_PROXY, FTP_PROXY

  They should be set for protocol-specific proxies. General proxy should be
  set with

        ALL_PROXY

  A comma-separated list of host names that shouldn't go through any proxy is
  set in (only an asterisk, '*' matches all hosts)

        NO_PROXY

git

http.proxy
   Override the HTTP proxy, normally configured using the http_proxy, https_proxy, 
   and all_proxy environment variables (see curl(1)). [..]

Python

urllib.request.getproxies()支持小写和大写变体。

它还提到了一个安全问题:

如果设置了环境变量 REQUEST_METHOD(通常表明您的脚本在 CGI 环境中运行),则环境变量 HTTP_PROXY(大写 _PROXY)将被忽略。这是因为客户端可以使用“Proxy:”HTTP 标头注入该变量。如果需要在 CGI 环境中使用 HTTP 代理,请显式使用 ProxyHandler,或者确保变量名称为小写(或至少带有 _proxy 后缀)。


某些应用程序允许NO_PROXY包含星号/IP 范围,而其他应用程序则不允许。


所以

export https_proxy=$http_proxy HTTP_PROXY=$http_proxy HTTPS_PROXY=$http_proxy NO_PROXY=$no_proxy

应该可以满足你的需求。

答案3

大多数应用程序似乎支持大写变量,而其他应用程序则支持小写变量。我认为一些混乱来自于删除对 HTTP_PROXY 的支持,因为它可以通过CGI-BIN 或 PHP 类型环境中的curlHTTP 标头进行设置。Proxy:来自curl的源代码:

https://github.com/curl/curl/blob/30e7641d7d2eb46c0b67c0c495a0ea7e52333ee2/lib/url.c#L2250-L2266

GitLab 博客文章描述了这种疯狂:

https://about.gitlab.com/blog/2021/01/27/we-need-to-talk-no-proxy/

答案4

WGET- 仅使用小写代理设置!

相关内容