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.

Подобни статии