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 в посочения Jetty API. getProxies връща неизменяем списък, така че по-старата рецепта getProxies().add(...) не е текущият интерфейс за промяна.
За публични HTTP цели по разрешен публичен прокси маршрут списъкът с HTTP проксита предлага кандидати за хоста и порта на проксито на Jetty. Четете действителния отговор на проксито, когато сравнявате конектори. Удостоверяването, политиката за дестинация и недостъпната цел остават отделно от избора между препратен HTTP и CONNECT.