Skip to content

Fix double flush for proxied 1xx responses to avoid duplicate responses

Timo Furrer requested to merge fix-double-flush-1xx-timeout into master

We've faced some timeout issues on proxied Kube API calls that upgraded to SPDY.

See #371

Turns out that this was due to a regression in the Golang standard library introduced with https://go-review.googlesource.com/c/go/+/269997

tl;dr: the standard library flushes the connection on a WriteHeader() for a status code of 1xx - possibly because of 100 Continue which needs to persist headers and with that doesn't set the internal wroteHeader flag which is used to determine if it should flush or not. However, for a 101 Switching Protocol we actually want it to flush (manually or not), but don't persist headers - at least don't send the response twice.

Golang upstream issue: https://github.com/golang/go/issues/59564

Closes: #371

Edited by Timo Furrer

Merge request reports