Spring WebClient cu Jetty: proxy HTTP simplu fără CONNECT
Folosiți conectorul Jetty din Spring cu protocoale HTTP/1.1 de client și proxy potrivite atunci când este necesară o cerere HTTP obișnuită redirecționată.
Handlerul de proxy HTTP din Reactor Netty stabilește un tunel CONNECT chiar și pentru o destinație HTTP simplă. Dacă proxy-ul dorit acceptă redirecționare HTTP/1.1 obișnuită, Spring WebClient poate folosi un alt conector acceptat.
Pentru Spring 6.2 cu API-ul client din Jetty 12.0.35 și integrarea compatibilă 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 și JettyClientHttpConnector sunt clase Spring. Gestionați pornirea și oprirea clientului Jetty furnizat prin ciclul de viață normal al aplicației.
Proxy-ul HTTP/1.1 din Jetty poate redirecționa o cerere HTTP/1.1 obișnuită fără tunel atunci când protocoalele destinației și ale proxy-ului client coincid. Politica sa requiresTunnel folosește CONNECT pentru destinații securizate și pentru căi de protocol incompatibile.
Aceasta nu este o modalitate de a elimina CONNECT dintr-un tunel HTTPS obișnuit. Păstrați schema destinației corectă.
Folosiți addProxy în API-ul Jetty menționat. getProxies returnează o listă nemodificabilă, deci rețeta mai veche getProxies().add(...) nu este interfața sa actuală de modificare.
Pentru destinații HTTP publice pe o rută de proxy publică permisă, lista de proxy-uri HTTP oferă candidați pentru gazda și portul proxy-ului Jetty. Citiți răspunsul real al proxy-ului când comparați conectori. Autentificarea, politica de destinație și o destinație indisponibilă rămân separate de alegerea între HTTP redirecționat și CONNECT.