http2: case insensitive handling for 100-continue
rfc 9110, section 10.1.1 states that the Expect field value is
case-insensitive.
Fixes golang/go#57824
Change-Id: Ie0e2662c58a2933087e0d35935c04ec61026a41d
Reviewed-on: https://go-review.googlesource.com/c/net/+/463096
Auto-Submit: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/http2/server.go b/http2/server.go
index b624dc0..9bd7035 100644
--- a/http2/server.go
+++ b/http2/server.go
@@ -2192,7 +2192,7 @@
tlsState = sc.tlsState
}
- needsContinue := rp.header.Get("Expect") == "100-continue"
+ needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue")
if needsContinue {
rp.header.Del("Expect")
}
diff --git a/http2/server_test.go b/http2/server_test.go
index 178c28b..fd62dcb 100644
--- a/http2/server_test.go
+++ b/http2/server_test.go
@@ -2332,7 +2332,7 @@
}, func(st *serverTester) {
st.writeHeaders(HeadersFrameParam{
StreamID: 1, // clients send odd numbers
- BlockFragment: st.encodeHeader(":method", "POST", "expect", "100-continue"),
+ BlockFragment: st.encodeHeader(":method", "POST", "expect", "100-Continue"),
EndStream: false,
EndHeaders: true,
})