HTTP_PROXY環境変数の「正しい」形式とは何ですか?キャップまたはキャップなし?


25

私は両方が発生しましたhttp_proxyHTTP_PROXY。両方のフォームは同等ですか?そのうちの1つが他より優先されますか?

回答:


27

アプリケーションが環境変数を使用する前に、環境変数に公式な意味を割り当てる中央機関はありません。POSIXは、いくつかの変数(の意味を定義しPATHTERMそれらのすべて大文字で、一般的に使用されていると、...)と、非規範的な方法でリストいくつかのより多くを。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 のみを尊重することがわかりました。
ジャウメ

cloudformationスクリプト(cfn-signal、cfn-init)は大文字のバリアントを使用しますHTTPS_PROXY。dockerは大文字のバリアントも使用します。
フェリペアルバレス

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

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() 小文字と大文字の両方のバリアントをサポートします。

また、セキュリティの問題にも言及しています。

通常、スクリプトがCGI環境で実行されていることを示す環境変数REQUEST_METHODが設定されている場合、環境変数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環境変数をエクスポートするときに使用するため、シェルスクリプトを記述するときに、他のプログラムとの名前の衝突を心配することなく小文字の変数名を使用できます。もちろんこれは単なる慣習であり、環境変数の名前を制限するための技術的な制限はないため、場合によっては小文字のバージョンを使用できますが、ベストプラクティスは大文字で、大文字と小文字を区別することを忘れないでください。値。


ほとんどの(基本的に、すべての)従来の環境変数とは異なりhttp_proxy、その兄弟は通常小文字です。
ジル 'SO-悪であるのをやめる'

バグになる@Gilles。
-hildred

3
いいえ、そうではありません。環境変数に大文字を使用する規則があることは正しいですが、これは単なる規則であり、絶対的な規則ではありません。環境変数http_proxyと環境変数の事実上の標準は、慣例に違反して小文字で綴られることになっています。使用するアプリケーションがHTTP_PROXY他の世界と互換性がないため、バグになります。
ジル「SO-悪であるのをやめる」

1
snarfは大文字を必要とし、wgetに対するバグレポートがあります。
-hildred

1
それは後方です。行動が20年の間、正しいか間違っているかによって、それがそうであり、変更されることはありません。先駆者はオオヤマネコだったと思う(ウェブよりも古い)。なぜ小文字を使用したのか分かりません。Curlは、大文字として始めてから、lynxおよびwgetとの互換性のために小文字に変更しました
ジル「SO-悪であるのをやめる」


-1

両方でhttp_proxyHTTP_PROXYRHELおよびubuntuベースのシステムで動作するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.