似乎有许多程序旨在读取这些环境变量,以决定要通过哪个代理才能连接到Internet上的资源。这些程序可能还具有自己的单独的代理设置,但是如果未设置它们,它们将很乐意使用这些环境变量...
- HTTP_PROXY
- HTTPS_PROXY
- NO_PROXY
我只是想知道:
- 这些环境变量是否标准?
- 是否存在书面建议规范(可能由OS制造商提供?),建议使用这些环境变量?
似乎有许多程序旨在读取这些环境变量,以决定要通过哪个代理才能连接到Internet上的资源。这些程序可能还具有自己的单独的代理设置,但是如果未设置它们,它们将很乐意使用这些环境变量...
我只是想知道:
Answers:
我同意BillThor的说法,即这更是一种约定而非标准。
我不知道这些变量的起源,但是在* nix上使用HTTP的情况下,许多约定似乎源自libcurl HTTP库和curl命令行程序的行为。
在https://curl.haxx.se/docs/manual.html上,有libcurl / curl可以理解的与使用HTTP代理相关的环境变量的描述:
环境变量
Curl读取并理解以下环境变量:
http_proxy, HTTPS_PROXY, FTP_PROXY
应该为协议特定的代理设置它们。一般代理应设置为
ALL_PROXY
设置了一个逗号分隔的不应该通过任何代理的主机名列表(仅星号,“ *”匹配所有主机)
NO_PROXY
如果主机名与这些字符串之一匹配,或者主机在这些字符串之一的域内,则不会代理与该节点的事务。
请注意,http_proxy
在这些变量中,只有一个拼写为小写。一些库/程序寻找这些变量的小写名称,而另一些则寻找大写字母的名称。为了安全起见,应定义每个变量的小写和大写版本。
另一个问题是引用的主机名匹配描述NO_PROXY
不准确,并且无法回答以下问题:
foo.example.com.
或否的点结尾?foo.example.com
只匹配这一个域还是应该匹配任何子域bar.foo.example.com
?如果是后者,那么它也应该匹配任何子域中的任何子域bar.baz.foo.example.com
吗?.foo.example.com
允许(在开始点),如果这样的话我应该与之相匹配?*
允许将星号()作为值(*.example.com
,*example.com
)的一部分,如果是,那么如何处理?缺乏正式规范会导致混乱和错误。这里必须提到libproxy库,该库旨在为代理配置提供正确和一致的支持。从项目的主页页面:
存在libproxy来回答以下问题:给定网络资源,我如何到达它?它处理所有细节,使您可以重新开始编程。
进一步阅读: