http_proxy
和两种情况我都遇到过HTTP_PROXY
。两种形式等价吗?其中一个优先于另一个吗?
答案1
在应用程序可以使用环境变量之前,没有中央机构为其指定官方含义。POSIXPATH
定义了一些变量( , ,...)的含义TERM
,并以非规范的方式列出了其他几个常用的变量,全部为大写。http_proxy
而朋友不是其中之一。
与许多应用程序使用的基本上所有常规环境变量不同,http_proxy
、https_proxy
和通常是小写的。我不记得有任何程序只能理解大写字母,我什至找不到一个尝试大写字母的程序。许多程序仅使用小写变量,包括 lynx、wget、curl、perl LWP、perl WWW::Search、python urllib/urllib2 等。因此,对于这些变量,正确的形式是小写形式。ftp_proxy
no_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 类型环境中的curl
HTTP 标头进行设置。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- 仅使用小写代理设置!