Spring WebClient з Jetty: звычайнае HTTP-праксі без CONNECT
Выкарыстоўвайце Jetty-канэктар Spring з адпаведнымі пратаколамі кліента і праксі HTTP/1.1, калі патрабуецца звычайны перанакіраваны HTTP-запыт.
Апрацоўнік HTTP-праксі Reactor Netty стварае тунель CONNECT нават для звычайнай HTTP-мэты. Калі праксі, які маецца на ўвазе, прымае звычайнае перанакіраванне HTTP/1.1, Spring WebClient можа выкарыстаць іншы падтрыманы канэктар.
Для Spring 6.2 з кліенцкім API Jetty 12.0.35 і сумяшчальнай інтэграцыяй 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 праз звычайны жыццёвы цыкл праграмы.
HTTP/1.1-праксі Jetty можа перанакіроўваць звычайны запыт HTTP/1.1 без тунеля, калі пратаколы мэты і кліента-праксі супадаюць. Яго палітыка requiresTunnel выкарыстоўвае CONNECT для абароненых мэт і несумяшчальных шляхоў пратакола.
Гэта не спосаб прыбраць CONNECT са звычайнага тунеля HTTPS. Трымайце схему мэты правільнай.
Выкарыстоўвайце addProxy у пазначаным API Jetty. getProxies вяртае нязменны спіс, таму стары рэцэпт getProxies().add(...) не з'яўляецца яго бягучым інтэрфейсам змянення.
Для публічных HTTP-мэт на дазволеным публічным праксі-маршруце спіс HTTP-праксі прапануе кандыдатаў для хоста і порта праксі Jetty. Чытайце фактычны адказ праксі пры параўнанні канэктараў. Аўтэнтыфікацыя, палітыка мэты і недаступная мэта застаюцца асобнымі ад выбару перанакіраванага HTTP ці CONNECT.