6

java.net.HttpURLConnectionを使用してサーバーにHTTPリクエストを送信しようとしています。送信する必要のあるHTTPヘッダーの1つは「Via」です。私のコードには次のようなものがあります:

connection.addRequestProperty("X-test", "test_header_contents"); // just a sanity test
connection.addRequestProperty("Via", "via_header_contents");

パケットスニファを使用すると、テストヘッダーは通過していることがわかりますが、viaヘッダーは通過していません。Viaが「制限付き」ヘッダーであることを知っているので、次の行を追加しました。

System.setProperty("sun.net.http.allowRestrictedHeaders", "true");

この行は、過去に同じ問題が発生したときに機能していましたが、現在は機能していません。HTTPヘッダーを追加しようとする直前にSystem.getPropertyを呼び出すと、trueが返されるため、システムプロパティが設定されることはわかっています。viaヘッダーを送信できるようにするために他にすべきことはありますか?私が言ったように、これは以前は機能しましたが、現在は機能しません。変更されたのは、Java6から7に移行したことだけだと思います。ご協力いただきありがとうございます。

4

3 に答える 3

8

私自身の質問に答えます。

問題は、プログラムの後半でシステムプロパティsun.net.http.allowRestrictedHeadersを設定していたことです。ヘッダーを送信しようとする直前に設定しましたが、これは遅すぎました。これは、HttpURLConnectionが何らかのプロパティのキャッシュを実行するためと思われます。プログラムの最初にプロパティを設定することで、すべてを機能させることができました。

于 2012-06-22T15:32:42.273 に答える
4

OpenJDK 7 (ビルド43)のソースコードは、静的初期化ブロックを使用してこのプロパティを設定し、値をキャッシュすることを示しています。したがって、設定する前にプロパティを設定する必要があります。これは、HttpURLConnectionクラスが最初にロードされる前に設定する必要があることを意味します。

于 2015-06-11T00:10:59.713 に答える
2

「Trailer」ヘッダーでも同じ問題が発生します

私も使用します:

 System.setProperty("sun.net.http.allowRestrictedHeaders", "true");

メインクラスの静的コンストラクターでそれを行い、JVMパラメーターを渡します

<PARAM name="java_arguments" value="-Dsun.net.http.allowRestrictedHeaders=true">

Eclipseからアプレットを実行すると機能しますが、ブラウザから実行すると機能しません

于 2012-11-23T12:20:16.590 に答える