問題タブ [apache-httpclient-5.x]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - org.apache.hc.core5.http2.impl.nio.AbstractH2StreamMultiplexer.onInput での java.nio.BufferOverflowException
このコードを使用して、HTTP/2 公開 URL をヒットします。
コールバック 2:
}
失敗し、理解できないこのスタックトレースがあります:
ログを追加すると (log4j2.xml を追加するだけ)、別の例外が発生します。
そう:
- ロギングを追加するだけで状況が変わる理由は、速度に関係していると思います
- 最初の例外の意味は何ですか?
- どうすれば修正できますか?
java - Apache HTTP/2 クライアント 5.0 POST リクエストにペイロード/コンテンツがありません
受信したパラメーターをエコー バックする Tomcat にデプロイされた小さなサンプル サーブレットがあります。Tomcat は、HTTP/1.1 および HTTP/2 をサポートするように構成されています。curl
HTTP/1.1 と HTTP/2 の両方で動作することを示すサーブレットへの GET 要求を作成するために使用できます。
Apache HTTP 5.0 クライアントを使用して、サーブレットをヒットする単体テストとPOST
、正常に機能するいくつかのパラメーター (要求コンテンツ) を含む要求があります。サーバーはパラメーターを受け取り、それらを読み取ることができるクライアントに返します。このテストでは、呼び出しを使用して HTTP/1.1 または HTTP/2 を使用するようにクライアントをCloseableHttpAsyncClient.setVersionPolicy()
呼び出します。ただし、HTTP/2 を使用するように変更すると、クライアントは要求コンテンツをサーバーに送信しません。
setVersionPolicy(HttpVersionPolicy.FORCE_HTTP_1)
以下は、成功した HTTP/1.1 呼び出しのサンプル コードです。. それを変更するとFORCE_HTTP_2
、呼び出しは HTTP/2.0 経由で行われますが、リクエストの内容は送信されません。
誰かが私が間違っていることや、何をする必要があるかを提案できますか? 新しい Apache 5.0 クライアント ライブラリの使用に関する多くのドキュメントは見つかりませんでした。サンプルには、送信および POST コンテンツ (または少なくとも私が見つけたもの) が示されていません。
java - Apache クライアント 5.0 の「接続が閉じられています」HTTPS POST エラーのトラブルシューティング方法
ポート 8002 で HTTP1.1 および HTTP/2 用に構成された Tomcat サーバーと、ポート 8003 でテストできるように HTTPS 用に構成された Tomcat サーバーがあります。Apache HTTP クライアント 5.0 を使用して HTTP/2 をサーバーと通信する Java コードを作成していますが、問題があります。最終的に、HTTP/2 を使用してコンテンツを含むメッセージをサーバーに POST できるようにしたいのですが、問題があるため、Apache に付属の例の 1 つであるH2TlsAlpnRequestExecutionExampleに基づいてコードを単純な例に落とし込みました。
与えられた例は、GET リクエストを使用してhttps://nghttp2.orgにアクセスしています。これを機能させることができます。POST 要求への変更も機能します。HTTP 405 (メソッドは許可されていません) 応答が返されますが、呼び出しが行われました。まったく同じ例をサーバーに向けると、HTTP/2 を使用して通常の HTTP/1.1 ポート (8002) に正常に GET および POST できます。ただし、HTTPv1.1 (HTTP/2 ではなく) を使用した GET/POST は HTTPS/8003 でも機能しますが、ポート 8003 で HTTPS に GET または POST しようとすると失敗します。
DEBUG をオンにすると、Apache ライブラリからのデバッグ情報はあまり表示されませんが、両方のケースで私の証明書が信頼されていることを示すログ メッセージが表示されるので、明らかに最初の呼び出しネゴシエーションが行われます。
これは、nghttp2.org への HTTP2 呼び出しのログです (ログの行から HTTP/2 を使用していることがわかります)。
これは、サーバーをポイントしたときのログです。証明書を信頼していると表示されているため、接続してネゴシエーションを行ったに違いありませんが、その後は何も起こりません。
これがコードです。
問題をデバッグまたは解決する方法を誰かが知っていますか? Tomcat サーバーのセットアップは問題ないと思います。それを確認するために使用できるツールまたはツールはありますか? 接続が閉じられた理由と、接続が閉じられた原因を調べるために、デバッグ/ログ情報をさらに見ることはできますか?