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.

Articole similare