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 アドレスを使用することができます。
これらのプロパティーはどちらも、起動時に 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 システムや Gnome 2.x システムでは、このプロパティーを true に設定し、システムのプロキシ設定を使用するように java.net stack に指示できます (これらのどちらのシステムでも、ユーザーインタフェースからプロキシをグローバルに設定可能)。このプロパティーは起動時に 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 キープアライブが有効な場合 (上を参照)、この値は、宛先ごとに同時にキープアライブされるアイドル接続の最大数を決定します。
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) で指定せず、これらのシステムプロパティーが定義されている場合、この値がドメイン名として使用されます。
これらのプロパティーはすべて、起動時に 1 回だけチェックされます。
名前解決の実行時、java.net パッケージはセキュリティー上とパフォーマンス上の両方の理由で、アドレスキャッシュを使用します。アドレス解決の試行は、前方解決 (名前から IP アドレスへ) でも逆方向の解決 (IP アドレスから名前へ) でもすべて、成功であったかどうかを問わず結果がキャッシュされます。そのため、以後の同一の要求はネームサービスにアクセスする必要がなくなります。これらのプロパティーでは、キャッシュの動作方法をいくつかの設定でチューニングできます。
networkaddress.cache.ttl (デフォルト: 下記参照)
値は、成功した名前検索がキャッシュに保持される秒数に対応する整数です。-1 の値や、その他の負の値はすべて、「ずっとキャッシュする」ことを示します。値 0 は、キャッシュを使用しないという意味です。セキュリティーマネージャーがインストールされている場合のデフォルト値は -1 (ずっと) で、セキュリティーマネージャーがインストールされていない場合は実装固有となります。
networkaddress.cache.negative.ttl (デフォルト: 10)
値は、失敗した名前検索がキャッシュに保持される秒数に対応する整数です。-1 の値や、その他の負の値はすべて、「ずっとキャッシュする」ことを意味します。値 0 は、キャッシュを使用しないという意味です。
これらの 2 つのプロパティーは、セキュリティーポリシーの一部であるため、-D オプションや System.setProperty() API では設定されません。その代わり、これらのプロパティーは JRE のセキュリティーポリシーファイル lib/security/java.security
で設定されます。