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


Answers:


27

在应用程序可以使用环境变量之前,没有中央机构为环境变量分配正式的含义。POSIX定义了一些变量(PATH,,TERM…)的含义,并以非规范的方式列出了其他一些常用的变量,所有变量均为大写。http_proxy朋友不是其中之一。

不像许多应用程序使用的基本上都是传统的环境变量,http_proxyhttps_proxyftp_proxyno_proxy通常小写。我不记得有任何程序只了解大写字母,甚至找不到能大写的程序。许多程序仅使用小写变体,包括lynx,wget,curl,perl LWP,perl WWW :: Search,python urllib / urllib2等。因此,对于这些变量,正确的形式是小写形式。

小写字母的名称至少可以追溯到1994年3月的CERN libwww 2.15(这要归功于StéphaneChazelas)。我不知道是什么促使了小写字母的选择,即使在那时,这仍然是不寻常的。


1
Unlike basically all conventional environment variables used by many applications, http_proxy, https_proxy, ftp_proxy and no_proxy are commonly lowercase. I don't recall any program that only understands them in uppercase->出于记录,我刚刚发现docker 17.04.0-ce 尊重NO_PROXY。
jaume

cloudformation脚本(cfn-signal,cfn-init)使用大写形式HTTPS_PROXY。码头工人也使用大写变体。
费利佩·阿尔瓦雷斯

尝试添加PPA存储库时,小写字母对我不起作用。sudo -E apt-add-repository ppa:xxxxx/xxxx。我必须unset https_proxyexport HTTPS_PROXY=http://a.b.c.d:xxxx
Mheni

7

没有标准,并且根据应用程序使用大写和小写版本(另请参见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

吉特

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

蟒蛇

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

应该覆盖你。


0

约定是在导出所有capps环境变量时使用它们,以便在编写Shell脚本时可以使用小写的变量名称,而不必担心与其他程序的名称冲突。当然,这只是一个约定,对环境变量名称的限制没有技术上的限制,因此在某些情况下可以使用小写形式,但是最佳实践是大写,并且请记住它们区分大小写,因此它们可以具有不同的含义价值观。


与大多数(基本上是所有)常规环境变量不同,http_proxy其同级通常是小写的。
吉尔(Gilles)'所以

@吉尔斯,那将是一个错误。
hildred

3
不,不是。没错,有一种约定将大写形式用于环境变量,但这只是约定,不是绝对规则。环境变量http_proxy和朋友的事实上的标准应该用小写字母拼写,这违反了约定。对于应用程序而言,HTTP_PROXY将是一个错误,因为它与世界其他地方不兼容。
吉尔(Gilles)'所以

1
snarf需要大写,并且存在针对wget的错误报告。
hildred,2015年

1
那是倒退。无论行为是对还是错,已经存在20年了,事实就是这样,并且不会改变。我认为先驱者是Lynx(比网路还老)。我不知道为什么使用小写字母。Curl以大写字母开头,然后更改为小写字母以与lynx和wget兼容
吉尔斯(Gillles)“所以-别再邪恶了”


-1

双方http_proxyHTTP_PROXY应在RHEL和基于Ubuntu系统的工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.