HTTPResponseDecoder is wrapped in ByteToMessageHandler.
Concretely, we need to discuss what is happening here.
Your server channel is reading data from the network and decoding the data into HTTPServerRequestPart. The problem you have is that you need to transform these into HTTPClientRequestPart for the HTTPRequestEncoder to tolerate it (that's what the type mismatch you saw above was). You can do this my modifying your proxy handler to change its InboundOut type to HTTPClientRequestPart. In general this won't be a problem, but you will need to wrap each of your .body payloads in .body(.byteBuffer()).