Skip to content

Conversation

pepmartinez
Copy link

While building a reverse proxy with ha-lb capabilities I found out that proxy.web() does not play totally well with retries if a request body is present: it turns out the original req is piped into the proxyReq immediately, even before the socket at proxyReq tries to connect; such piping would read some (or even all) of the original req's body even if the socket does not connect; those body bytes would be lost if we choose to proxy.web() the same request onto an alternative target

The patch delays the piping until proxyReq's socket is present, and it's either connected (that is, reused from an agent) or suceeds to connect

(allows retry of proxy.web() on connection refused, for example
@chasetec
Copy link

Don't you need to emit the proxyReq event before the pipe call? If the pipe sends the first chunk then the headers will be sent with it and won't be mutable when the proxyReq event is generated.

@pepmartinez
Copy link
Author

Well, all I did is to defer the pipe() until there's a socket. There were no emit() before, to start with

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants