web-dev-qa-db-ja.com

HTTP_PROXY、HTTPS_PROXY、NO_PROXY環境変数は標準ですか?

多くのプログラムは、これらの環境変数を読み取って、インターネット上のリソースに接続するために経由するプロキシを決定するように設計されているようです。これらのプログラムには独自の個別のプロキシ設定がある場合もありますが、これらが設定されていない場合は、これらの環境変数を喜んで使用します...

  • HTTP_PROXY
  • HTTPS_PROXY
  • NO_PROXY

ただ知りたいだけです:

  • これらの環境変数は標準ですか?
  • これらの環境変数の使用を推奨する仕様書(OSの製造元によるものか?)はありますか?
25
Niko Bellic

これは標準というより慣習であるという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は、これらの変数の1つだけであるため、小文字のスペルになっていることに注意してください。一部のライブラリ/プログラムはこれらの変数の小文字の名前を探しますが、他のライブラリ/プログラムは大文字の名前を探します。 safeであるためには、各変数の小文字バージョンと大文字バージョンの両方を定義する必要があります。

もう1つの問題は、ホスト名がNO_PROXYと照合される方法の引用された説明が正確ではなく、次の質問に回答しないことです。

  • 値は 完全修飾ドメイン名(FQDN) である必要があります。つまり、foo.example.com.のようなドットで終わるかどうか。
  • foo.example.comはこの1つのドメインのみに一致する必要がありますか、それともbar.foo.example.comなどのサブドメインにも一致する必要がありますか?後者の場合、bar.baz.foo.example.comなどのサブドメイン内のサブドメインにも一致する必要がありますか?
  • .foo.example.com(最初のドット)は許可されていますか?許可されている場合、何に一致させる必要がありますか?
  • アスタリスク(*)は値(*.example.com*example.com)の一部として許可されますか?許可されている場合、どのように扱われますか?

正式な仕様がないと、混乱やバグが発生します。ここでは、プロキシ構成の正確で一貫したサポートを提供することを目的としたlibproxyライブラリについて言及する必要があります。プロジェクトのホームから ページ

libproxyは、質問に答えるために存在します:ネットワークリソースが与えられた場合、どのようにしてそれに到達しますか?すべての詳細を処理し、プログラミングに戻ることができます。

参考文献:

18
Piotr Dobrogost

これは標準というよりは慣例です。これは、実際に接続を行う1つ以上のプロトコルハンドラライブラリによってサポートされている可能性があります。 Javaは、プロトコルライブラリで同様のプロパティを使用します。

一般的な規則を理解して使用すると、開発がはるかに簡単になります。また、最小の驚きの原則を実装し、プログラムをjust work

13
BillThor