Skip to content

Commit 2c3ce57

Browse files
committed
Support full-duplex http1.1
Signed-off-by: Jack Kleeman <jackkleeman@gmail.com>
1 parent 1c25ec9 commit 2c3ce57

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ This changelog keeps track of work items that have been completed and are ready
3232
### Improvements
3333

3434
- **General**: Make interceptor request logging optional ([#1375](https://github.com/kedacore/http-add-on/pull/1375))
35+
- **Interceptor**: Add support for full-duplex HTTP1.1 ([#1386](https://github.com/kedacore/http-add-on/pull/1386))
3536

3637
### Fixes
3738

interceptor/middleware/responsewriter.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,12 @@ func (rw *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
5858

5959
return nil, nil, errors.New("http.Hijacker not implemented")
6060
}
61+
62+
// https://pkg.go.dev/net/http#ResponseController.EnableFullDuplex
63+
func (rw *responseWriter) EnableFullDuplex() error {
64+
if hj, ok := rw.downstreamResponseWriter.(interface{ EnableFullDuplex() error }); ok {
65+
return hj.EnableFullDuplex()
66+
}
67+
68+
return errors.New("EnableFullDuplex() not implemented")
69+
}

interceptor/proxy_handlers.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ func newForwardingHandler(
109109
r.Header.Add("X-KEDA-HTTP-Cold-Start-Ref-Name", httpso.Spec.ScaleTargetRef.Name)
110110
r.Header.Add("X-KEDA-HTTP-Cold-Start-Ref-Namespace", httpso.Namespace)
111111

112+
rc := http.NewResponseController(w)
113+
if err := rc.EnableFullDuplex(); err != nil {
114+
lggr.Error(err, "Could not enable full duplex on responsewriter, continuing")
115+
}
116+
112117
shouldFailover := hasFailover && err != nil
113118
if tracingCfg.Enabled {
114119
uh = handler.NewUpstream(otelhttp.NewTransport(roundTripper), tracingCfg, shouldFailover)

0 commit comments

Comments
 (0)