Обробник 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 у зазначеному API Jetty. getProxies повертає незмінний список, тому старий рецепт getProxies().add(...) не є поточним інтерфейсом зміни.

Для публічних HTTP-призначень на дозволеному публічному проксі-маршруті список HTTP-проксі надає кандидатів для хоста й порту проксі Jetty. Порівнюючи конектори, читайте фактичну відповідь проксі. Автентифікація, політика призначення й недоступне призначення залишаються окремо від вибору переспрямованого HTTP чи CONNECT.

Схожі статті