java.netパッケージのさまざまなクラスのメカニズムと動作を変更するために使用される、いくつかの標準システム・プロパティがあります。 一部はVMの起動時に1回だけチェックされるので、javaコマンドの-Dオプションを使用するのが適切な設定方法です。一方、他のプロパティの性質はより動的で、System.setProperty() APIを使用して変更することもできます。 このドキュメントは、これらのすべてのプロパティのリストを示し、それらの詳細を説明することを目的としています。
特にノート書きがなければ、プロパティ値は使用されるたびにチェックされます。
java.net.preferIPv4Stack (デフォルト: false)
IPv6を利用可能なオペレーティング・システムでは、ベースとなるネイティブ・ソケットは、デフォルトではIPv6ソケットです。これによりアプリケーションは、IPv4ホストとIPv6ホストの両方に接続したり、その両方のホストからの接続を受け入れたりできます。 ただし、アプリケーションでIPv4専用ソケットを使用する場合、このプロパティをtrueに設定することができます。 この場合、そのアプリケーションはIPv6専用ホストとは通信できません。
java.net.preferIPv6Addresses (デフォルト: false)
IPv4アドレスとIPv6アドレスの両方を持つホストを扱う場合、IPv6を利用可能なオペレーティング・システムでは、IPv6アドレスよりもIPv4アドレスの使用を優先するのがデフォルトの動作です。 これは、下位互換性を確保するためで、たとえば、IPv4のアドレス表現(たとえば192.168.1.1)に依存するアプリケーションが挙げられます。 可能であれば、このプロパティをtrueに設定して、その設定を変更し、IPv4アドレスよりもIPv6アドレスを使用するか、またはオペレーティング・システムから返されたアドレスの順序を保持するsystemを使用できます。
これらのプロパティはどちらも、起動時に1回だけチェックされます。
プロキシ・サーバーは、ネットワーク・サービスへの間接的な接続を可能にするもので、主に、セキュリティ上の理由(ファイアウォールを通過させる)とパフォーマンス上の理由(プロキシはキャッシュ・メカニズムを提供することが多い)のために使用されます。 次のプロパティによって、さまざまな種類のプロキシを構成できます。
HTTP
次のプロキシ設定がHTTPプロトコル・ハンドラによって使用されます。
http.proxyHost (デフォルト: <なし>)
プロキシ・サーバーのホスト名またはアドレス。
http.proxyPort (デフォルト: 80)
プロキシ・サーバーのポート番号。
http.nonProxyHosts (デフォルト: localhost|127.*|[::1])
プロキシを通過しないでアクセスすべきホストを指定します。 通常これは内部ホストを定義します。 このプロパティの値は、'|'文字で区切られたホストのリストです。 さらに、パターン・マッチングのためにワイルドカード文字'*'も使用できます。 たとえば-Dhttp.nonProxyHosts=”*.foo.com|localhost”
は、foo.comドメイン内のすべてのホストで、プロキシ・サーバーが指定されている場合でもlocalhostは直接アクセスする必要があることを示します。
デフォルト値には、ループバック・アドレスのあらゆる一般的なバリエーションが含まれません。
HTTPS
これはHTTP over SSLのことで、支払いサイトでのように、機密性が必要とされるときに使われるセキュアなバージョンのHTTPです。
次のプロキシ設定がHTTPSプロトコル・ハンドラによって使用されます。
https.proxyHost (デフォルト: <なし>)
プロキシ・サーバーのホスト名またはアドレス。
https.proxyPort (デフォルト: 443)
プロキシ・サーバーのポート番号。
HTTPSプロトコル・ハンドラは、HTTPプロトコルと同じnonProxyHostsプロパティを使用します。
FTP
次のプロキシ設定がFTPプロトコル・ハンドラによって使用されます。
ftp.proxyHost (デフォルト: <なし>)
プロキシ・サーバーのホスト名またはアドレス。
ftp.proxyPort (デフォルト: 80)
プロキシ・サーバーのポート番号。
ftp.nonProxyHosts (デフォルト: localhost|127.*|[::1])
プロキシを通過しないでアクセスすべきホストを指定します。 通常これは内部ホストを定義します。 このプロパティの値は、'|'文字で区切られたホストのリストです。 さらに、パターン・マッチングのためにワイルドカード文字'*'も使用できます。 たとえば-Dhttp.nonProxyHosts=”*.foo.com|localhost”
は、foo.comドメイン内のすべてのホストで、プロキシ・サーバーが指定されている場合でもlocalhostは直接アクセスする必要があることを示します。
デフォルト値には、ループバック・アドレスのあらゆる一般的なバリエーションが含まれません。
SOCKS
これは別の種類のプロキシです。 これはTCPレベルで動作するため、低レベル型のトンネリングが可能です。 実際には、SOCKSプロキシ・サーバーを設定しているJava(tm)プラットフォームでは、ほかのプロキシが指定されていなければ、すべてのTCP接続がそのプロキシを通過するようになります。 Java SEの実装でSOCKSがサポートされている場合、次のプロパティが使用されます。
socksProxyHost (デフォルト: <なし>)
プロキシ・サーバーのホスト名またはアドレス。
socksProxyPort (デフォルト: 1080)
プロキシ・サーバーのポート番号。
socksProxyVersion (デフォルト: 5)
サーバーでサポートされているSOCKSプロトコルのバージョン。 デフォルトはSOCKS V5を示す5
ですが、SOCKS V4を表す4
も指定できます。 これら以外の値にプロパティを設定すると、未指定の動作が発生します。
java.net.socks.username (デフォルト: <なし>)
SOCKSv5サーバーが認証を要求し、java.net.Authenticatorインスタンスが見つからなかった場合に使用するユーザー名。
java.net.socks.password (デフォルト: <なし>)
SOCKSv5サーバーが認証を要求し、java.net.Authenticatorインスタンスが見つからなかった場合に使用するパスワード。
上のプロパティまたはオーセンティケータのどちらも認証を提供していない場合、プロキシが認証を要求すると、パスワードなしでuser.nameプロパティが使用されます。
java.net.useSystemProxies (デフォルト: false)
Windowsシステム、macOSシステムおよびGnomeシステムでは、このプロパティをtrueに設定してjava.netスタックに指示し、システム・プロキシ設定(これらの両方のシステムでは、プロキシをユーザー・インタフェースを通じてグローバルに設定できます)を使用することができます。 このプロパティは起動時に1回だけチェックされることに注意してください。
http.agent (デフォルト: “Java/<バージョン>”)
HTTP要求のUser-Agent要求ヘッダーに入れて送信される文字列を定義します。 文字列“Java/<バージョン>”は、プロパティ内に記述される文字列に追加されることに注意してください(たとえば -Dhttp.agent=”foobar”が使用される場合、VMのバージョンが1.5.0であればUser-Agentヘッダーには“foobar Java/1.5.0”が格納される)。 このプロパティは起動時に1回だけチェックされます。
http.keepalive (デフォルト: true)
持続接続をサポートすべきかどうかを示します。 これを使用すると、複数のHTTP要求に対して再利用されるベースとなるのソケット接続を許可することによって、パフォーマンスが改善されます。 これがtrueに設定されている場合は、HTTP 1.1サーバーとの間で持続接続が要求されます。
http.maxConnections (デフォルト: 5)
HTTPキープアライブが有効な場合(上を参照)、この値は、宛先ごとに同時にキープアライブされるアイドル接続の最大数を決定します。
and
サーバー(またはプロキシ)でキープアライブ時間が指定されていない場合、これらのプロパティはHTTPキープアライブ・キャッシュの動作を変更します。 この場合、プロパティが設定されると、アイドル接続は指定された秒数後に閉じられます。 プロパティが設定され、サーバーが"Keep-Alive"レスポンス・ヘッダーにキープアライブ時間を指定した場合、サーバーによって指定された時間が使用されます。 プロパティが設定されておらず、かつサーバーにキープアライブ時間が指定されていない場合、http.keepAlive
がtrue
であると仮定して、接続は実装で定義された時間有効のままです。
http.maxRedirects (デフォルト: 20)
この整数値は、特定の要求に関して、プロトコル・ハンドラが自動的に従うHTTPリダイレクトの最大数を決定します。
http.auth.digest.validateServer (デフォルト: false)
http.auth.digest.validateProxy (デフォルト: false)
http.auth.digest.cnonceRepeat (デフォルト: 5)
これら3つのプロパティは、HTTPダイジェスト認証機能の動作を変更します。 ダイジェスト認証は、サーバーがそのユーザーのパスワードを認識していることをクライアントに証明することによって、サーバー自体をクライアントに認証させるための限定された機能をサーバーに提供します。 ただしこの機能は、すべてのHTTPサーバーがサポートするわけではなく、デフォルトではオフになっています。 最初の2つのプロパティは、trueに設定すると、それぞれオリジン・サーバーまたはプロキシ・サーバーとの認証で、このチェック機能を使用することができます。
通常は、3つ目のプロパティを変更する必要はありません。 これは、cnonce値を再使用する回数を決定します。 このプロパティは、MD5-sessアルゴリズムを使用する場合に役に立ちます。 この値を増やすと、各HTTP要求のためにハッシュしなければならない情報の量が減るので、クライアントとサーバーの両方で計算のオーバーヘッドが減少します。
http.auth.ntlm.domain (デフォルト: <none>)
NTLMはもう1つの認証スキームです。 これはjava.net.Authenticatorクラスを使用して、必要なときにユーザー名とパスワードを取得します。 しかし、NTLMの場合はNTドメイン名も必要です。 そのドメインを指定するには、次の3つの方法があります。
ドメインを指定しない。 環境によっては、実際にはドメインが必要とされないので、アプリケーションで指定する必要がありません。
ユーザー名の前にドメイン名+円記号「\」をつけることで、ドメイン名をユーザー名内にエンコードする。 この方法では、ユーザーがこの表記方法を使用しなければならないということを意識すれば、Authenticatorクラスを使用する既存のアプリケーションを変更する必要がありません。
ドメイン名を方法2)で指定せず、これらのシステム・プロパティが定義されている場合、この値がドメイン名として使用されます。
jdk.https.negotiate.cbt (デフォルト: <never>)
KerberosまたはKerberosを使用したネゴシエーション認証スキームがHttpsURLConnection
でHTTPSを介して使用される場合、TLSチャネル・バインディング・トークン(CBT)の生成および送信を制御します。 次の3つの設定が可能です:
"never"。 これは、プロパティが設定されていない場合もデフォルト値です。 この場合、CBTは送信されません。
"always"。 CBTは、HTTPSを介してすべてのKerberos認証試行に対して送信されます。
"domain:<comma separated domain list>" リスト内の各ドメインは、CBTが送信される宛先ホストを指定します。 ドメインには、fooやfoo.comなどの単一ホスト、またはRFC 2732で指定されたリテラルIPアドレス、または*.foo.comのようにfoo.comおよびそのサブドメイン下のすべてのホストに一致するワイルドカードを使用できます。 CBTは、リスト・エントリのいずれかと一致しない宛先には送信されません
生成されるチャネル・バインディング・トークンは、RFC 5929で定義されているタイプ"tls-server-end-point"です。
これらのプロパティはすべて、起動時に1回だけチェックされます。
名前解決の実行時、java.netパッケージはセキュリティ上とパフォーマンス上の両方の理由で、アドレス・キャッシュを使用します。 アドレス解決の試行は、前方解決(名前からIPアドレスへ)でも逆方向の解決(IPアドレスから名前へ)でもすべて、成功であったかどうかを問わず結果がキャッシュされます。そのため、以後の同一の要求はネーム・サービスにアクセスする必要がなくなります。 これらのプロパティでは、キャッシュの動作方法をいくつかの設定でチューニングできます。
networkaddress.cache.ttl (デフォルト: 下記を参照)
値は、成功した名前検索がキャッシュに保持される秒数に対応する整数です。 -1の値や、その他の負の値はすべて、「ずっとキャッシュする」ことを意味します。値0は、キャッシュを使用しないという意味です。 セキュリティ・マネージャがインストールされている場合のデフォルト値は -1 (ずっと)で、セキュリティ・マネージャがインストールされていない場合は実装固有となります。
networkaddress.cache.negative.ttl (デフォルト: 10)
値は、失敗した名前検索がキャッシュに保持される秒数に対応する整数です。 -1の値や、その他の負の値はすべて、「ずっとキャッシュする」ことを意味します。値0は、キャッシュを使用しないという意味です。
これらの2つのプロパティは、セキュリティ・ポリシーの一部であるため、-DオプションやSystem.setProperty() APIでは設定されません。そのかわり、これらのプロパティはセキュリティ・プロパティとして設定されます。
バグを報告する、または機能強化を提案する
さらにAPIリファレンスと開発者ドキュメントについては、概念的な概要、用語の定義、回避策、および作業コードの例など、より詳細な開発者向けの説明が含まれている「Java SEドキュメンテーション」を参照してください。
Javaは、米国およびその他の国におけるOracleおよび/またはその関連会社の商標または登録商標です。
Copyright © 1993, 2024, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. 使用は「ライセンス条項」と「ドキュメンテーション再配布ポリシー」に従います。