reactor / reactor-netty

TCP/HTTP/UDP/QUIC client/server with Reactor over Netty
https://projectreactor.io
Apache License 2.0
2.61k stars 647 forks source link

Unexpected Behavior: httpHeaders Callback Invoked for Every Request Instead of Only During Initial CONNECT in Netty HTTP Client with Proxy #3501

Open matthew-js-porter opened 2 weeks ago

matthew-js-porter commented 2 weeks ago

When configuring a Netty HTTP client to use a proxy, I would have expected the headers callback specified in the ProxyProvider to be called only during the initial CONNECT request to the proxy server and that after the tunnel was created there would be no need to call the headers callback. Is my understanding on the proxy correct or am I completely off base here?

Expected Behavior

The httpHeaders method to be called only when creating the tunnel to the Proxy.

Actual Behavior

The httpHeaders method is ran for every request the httpClient makes.

Steps to Reproduce

Configure HTTP Client with a Proxy like this. When making requests observe that the httpHeaders method is ran for each request.

final var httpClient = HttpClient.create().proxy(proxy -> proxy.type(ProxyProvider.Proxy.HTTP).host(proxyUrl).port(proxyPort).httpHeaders(headers -> {
            System.out.println("in headers");
           //headers.add("Proxy-Authorization", "Negotiate " + getKerberosToken());
        }).build());
violetagg commented 23 hours ago

@matthew-js-porter The behaviour is intentional - if the token is changed then we need to discard the old pooled connections and start new connections with the new token.

I prepared a PR #3517 that will guarantee that we will invoke this just once though.