@@ -58,13 +58,25 @@ func (h *Handler) handleUpgradeResponse(logger *zap.Logger, rw http.ResponseWrit
58
58
return
59
59
}
60
60
61
+ // write header first, response headers should not be counted in size
62
+ // like the rest of handler chain.
63
+ copyHeader (rw .Header (), res .Header )
64
+ rw .WriteHeader (res .StatusCode )
65
+
66
+ logger .Debug ("upgrading connection" )
67
+
61
68
//nolint:bodyclose
62
69
conn , brw , hijackErr := http .NewResponseController (rw ).Hijack ()
63
70
if errors .Is (hijackErr , http .ErrNotSupported ) {
64
71
h .logger .Sugar ().Errorf ("can't switch protocols using non-Hijacker ResponseWriter type %T" , rw )
65
72
return
66
73
}
67
74
75
+ if hijackErr != nil {
76
+ h .logger .Error ("hijack failed on protocol switch" , zap .Error (hijackErr ))
77
+ return
78
+ }
79
+
68
80
// adopted from https://github.com/golang/go/commit/8bcf2834afdf6a1f7937390903a41518715ef6f5
69
81
backConnCloseCh := make (chan struct {})
70
82
go func () {
@@ -78,17 +90,6 @@ func (h *Handler) handleUpgradeResponse(logger *zap.Logger, rw http.ResponseWrit
78
90
}()
79
91
defer close (backConnCloseCh )
80
92
81
- // write header first, response headers should not be counted in size
82
- // like the rest of handler chain.
83
- copyHeader (rw .Header (), res .Header )
84
- rw .WriteHeader (res .StatusCode )
85
-
86
- logger .Debug ("upgrading connection" )
87
- if hijackErr != nil {
88
- h .logger .Error ("hijack failed on protocol switch" , zap .Error (hijackErr ))
89
- return
90
- }
91
-
92
93
start := time .Now ()
93
94
defer func () {
94
95
conn .Close ()
0 commit comments