Spring WebClient amb Jetty: proxy HTTP pla sense CONNECT
Utilitza el connector Jetty de Spring amb protocols de client i de proxy HTTP/1.1 coincidents quan cal una sol·licitud HTTP reenviada ordinària.
El gestor de proxy HTTP de Reactor Netty estableix un túnel CONNECT fins i tot per a una destinació HTTP simple. Si el proxy previst accepta en canvi un reenviament HTTP/1.1 ordinari, Spring WebClient pot utilitzar un altre connector compatible.
Per a Spring 6.2 amb l'API de client de Jetty 12.0.35 i una integració compatible de 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 són classes de Spring. Gestiona l'arrencada i l'aturada del client Jetty subministrat mitjançant el cicle de vida normal de l'aplicació.
El proxy HTTP/1.1 de Jetty pot reenviar una sol·licitud HTTP/1.1 ordinària sense túnel quan els protocols de destinació i de client-proxy coincideixen. La seva política requiresTunnel utilitza CONNECT per a destinacions segures i per a camins de protocol incompatibles.
Això no és una manera d'eliminar CONNECT d'un túnel HTTPS ordinari. Mantén correcte l'esquema de la destinació.
Utilitza addProxy a l'API de Jetty indicada. getProxies retorna una llista no modificable, així que la recepta antiga getProxies().add(...) no és la seva interfície de mutació actual.
Per a destinacions HTTP públiques en una ruta de proxy públic permesa, la llista de proxys HTTP proporciona candidats per a l'amfitrió i el port del proxy de Jetty. Llegeix la resposta real del proxy quan comparis connectors. L'autenticació, la política de destinació i una destinació no disponible continuen sent separades de triar HTTP reenviat o CONNECT.