[解決済み] Http2におけるGoAway Frameとは何ですか、またRedirectsとの関連は何ですか?
2022-02-19 01:31:44
質問事項
私が知っているのは Java 9 が提供する HTTP/2 クライアント で、インキュベータモジュールを以下のコードで試しているところ。
// Request builder
URI uri = new URI("http://www.stackoverflow.com/"); // using www.google.com gives me some payload with no exception
HttpRequest request = HttpRequest.newBuilder().uri(uri).GET().build();
// Client
HttpClient httpClient = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build();
System.out.println(httpClient.version());
// Response builder
HttpResponse response = httpClient.send(request, HttpResponse.BodyHandler.asString());
System.out.println("statusCode = " + response.statusCode()); // 200 for google.com
出力としてこれを受け取りました。
Exception in thread "main" java.io.IOException: /192.168.0.2:60726: GOAWAY received at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection.handleGoAway(Http2Connection.java:613) at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection.handleConnectionFrame(Http2Connection.java:531) at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection.processFrame(Http2Connection.java:466) at jdk.incubator.httpclient/jdk.incubator.http.internal.frame.FramesDecoder.decode(FramesDecoder.java:114) at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection$FramesController.processReceivedData(Http2Connection.java:152) at jdk.incubator.httpclient/jdk.incubator.http.Http2Connection.asyncReceive(Http2Connection.java:425) at jdk.incubator.httpclient/jdk.incubator.http.AsyncSSLDelegate.upperRead(AsyncSSLDelegate.java:557) at jdk.incubator.httpclient/jdk.incubator.http.internal.common.Queue.put(Queue.java:73) at jdk.incubator.httpclient/jdk.incubator.http.AsyncSSLDelegate.asyncReceive(AsyncSSLDelegate.java:503) at jdk.incubator.httpclient/jdk.incubator.http.PlainHttpConnection.asyncRead(PlainHttpConnection.java:300) at jdk.incubator.httpclient/jdk.incubator.http.PlainHttpConnection$ReadEvent.handle(PlainHttpConnection.java:395) at jdk.incubator.httpclient/jdk.incubator.http.HttpClientImpl$SelectorManager.handleEvent(HttpClientImpl.java:438) at jdk.incubator.httpclient/jdk.incubator.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:408)
スタックトレースの下に移動してみると
GOAWAY
の型の1つとしてリストアップされています。
jdk.incubator.http.internal.frame.Http2Frame
しかし、この内部クラスはあまり文書化されておらず、この型が何を表しているのかを正確に知ることはできません。JEPからのリンクでも同じように検索してみましたが、見つかりませんでした。
Q. GoAwayフレームとは何ですか?いつ、どのように使うのですか?
Q. リダイレクトを行わないクライアントを使用するようにコードを変更した場合、GET "stackoverflow.com"を試しても同じ例外が発生しないのはなぜでしょうか?
HttpClient httpClient = HttpClient.newBuilder().build();
解決方法は?
で設定したように 仕様 ,
GOAWAYフレーム(type=0x7)を使用して、Graceful Shutdownを開始します。 は、サーバーによるコネクション
このフレームは、リダイレクトに続く2つ目の接続でサーバーから送信されていると思われます。
stackoverflow.comのすべてのURLはhttp/2接続を受け入れるのでしょうか?私のHTTP/2-SPDYブラウザプラグインのインジケータを見ると、そうではなさそうです。
関連
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] URI、URL、URNの違いは何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み] Hide Utility Class Constructor : ユーティリティクラスはパブリックまたはデフォルトコンストラクタを持つべきではありません。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件