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では設定されません。そのかわり、これらのプロパティはセキュリティ・プロパティとして設定されます。