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.