Spring WebClient ja Jetty: tavallinen HTTP-välitys ilman CONNECTia
Käytä Springin Jetty-liitintä vastaavilla HTTP/1.1-asiakas- ja välityspalvelinprotokollilla, kun tarvitaan tavallinen edelleen välitetty HTTP-pyyntö.
Reactor Nettyn HTTP-välityspalvelimen käsittelijä muodostaa CONNECT-tunnelin myös tavalliselle HTTP-kohteelle. Jos aiottu välityspalvelin hyväksyy sen sijaan tavallisen HTTP/1.1-edelleenvälityksen, Spring WebClient voi käyttää toista tuettua liitintä.
Spring 6.2:lle Jetty 12.0.35:n asiakas-API:n ja yhteensopivan Jetty Reactive Streams -integroinnin kanssa:
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 ja JettyClientHttpConnector ovat Springin luokkia. Hallitse annetun Jetty-asiakkaan käynnistys ja pysäytys sovelluksen tavallisen elinkaaren kautta.
Jettyn HTTP/1.1-välityspalvelin voi välittää tavallisen HTTP/1.1-pyynnön ilman tunnelia, kun kohteen ja asiakas-välityspalvelimen protokollat vastaavat toisiaan. Sen requiresTunnel-käytäntö käyttää CONNECTia suojattuihin kohteisiin ja yhteensopimattomiin protokollapolkuihin.
Tämä ei ole tapa poistaa CONNECT tavallisesta HTTPS-tunnelista. Pidä kohteen skeema oikeana.
Käytä addProxy-metodia mainitussa Jetty-API:ssa. getProxies palauttaa muuttumattoman listan, joten vanhempi getProxies().add(...) -resepti ei ole sen nykyinen muokkausrajapinta.
Julkisille HTTP-kohteille sallitulla julkisella välityspalvelinreitillä HTTP-välityspalvelinluettelo tarjoaa ehdokkaita Jettyn välityspalvelimen isäntää ja porttia varten. Lue välityspalvelimen todellinen vastaus, kun vertailet liittimiä. Todennus, kohdekäytäntö ja tavoittamaton kohde pysyvät erillään valinnasta edelleen välitetyn HTTP:n ja CONNECTin välillä.