Jetty を使った Spring WebClient:CONNECT なしの通常 HTTP プロキシ
通常の転送 HTTP リクエストが必要な場合は、Spring の Jetty コネクタを一致する HTTP/1.1 クライアントおよびプロキシプロトコルとともに使用します。
Reactor Netty の HTTP プロキシハンドラは、通常の HTTP 宛先であっても CONNECT トンネルを確立します。想定するプロキシが代わりに通常の HTTP/1.1 転送を受け付ける場合は、Spring WebClient は別の対応コネクタを使用できます。
Spring 6.2 で Jetty 12.0.35 のクライアント API と互換性のある Jetty Reactive Streams 統合を使用する場合:
var jetty = new org.eclipse.jetty.client.HttpClient(
new org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP());
jetty.getProxyConfiguration().addProxy(
new org.eclipse.jetty.client.HttpProxy("proxy.example", 8080));
var client = WebClient.builder()
.clientConnector(new JettyClientHttpConnector(jetty))
.build();
WebClient と JettyClientHttpConnector は Spring のクラスです。提供した Jetty クライアントの起動と停止は、アプリケーションの通常のライフサイクルで管理してください。
Jetty の HTTP/1.1 プロキシは、宛先とクライアント-プロキシのプロトコルが一致する場合、トンネルなしで通常の HTTP/1.1 リクエストを転送できます。requiresTunnel ポリシーは、安全な宛先と互換性のないプロトコル経路に CONNECT を使用します。
これは通常の HTTPS トンネルから CONNECT を削除する方法ではありません。宛先のスキームは正しく保ってください。
記載の Jetty API では addProxy を使用します。getProxies は変更不可能なリストを返すため、古い getProxies().add(...) の手法は現在の変更インターフェースではありません。
許可された公開プロキシ経路の公開 HTTP 宛先には、HTTP プロキシ一覧が Jetty のプロキシホストとポートの候補を提供します。コネクタを比較するときは実際のプロキシ応答を確認してください。認証、宛先ポリシー、到達不能な宛先は、転送 HTTP と CONNECT の選択とは別です。