aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarshavardhana <hrshvardhana@gmail.com>2016-01-09 11:55:32 -0800
committerBrad Fitzpatrick <bradfitz@golang.org>2016-01-10 01:35:01 +0000
commit2747ca351efc2b9b0f1d0a7988c752f859feebb7 (patch)
tree9f9fa842e25b6060c1802b27829a1c7a9c180af7
parent64e2a7170120f20f62d5c8b15da26be1ef18226e (diff)
downloadgo-2747ca351efc2b9b0f1d0a7988c752f859feebb7.tar.gz
go-2747ca351efc2b9b0f1d0a7988c752f859feebb7.zip
net/http: don't remove Expect Request header in Server.
Fixes #13893 Change-Id: I2577b38fdb19299227dc146f707cf9df663dcdfc Reviewed-on: https://go-review.googlesource.com/18471 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/net/http/serve_test.go27
-rw-r--r--src/net/http/server.go1
2 files changed, 27 insertions, 1 deletions
diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go
index f36bb38ba7..00220b471c 100644
--- a/src/net/http/serve_test.go
+++ b/src/net/http/serve_test.go
@@ -3639,6 +3639,33 @@ func TestTolerateCRLFBeforeRequestLine(t *testing.T) {
}
}
+func TestIssue13893_Expect100(t *testing.T) {
+ // test that the Server doesn't filter out Expect headers.
+ req := reqBytes(`PUT /readbody HTTP/1.1
+User-Agent: PycURL/7.22.0
+Host: 127.0.0.1:9000
+Accept: */*
+Expect: 100-continue
+Content-Length: 10
+
+HelloWorld
+
+`)
+ var buf bytes.Buffer
+ conn := &rwTestConn{
+ Reader: bytes.NewReader(req),
+ Writer: &buf,
+ closec: make(chan bool, 1),
+ }
+ ln := &oneConnListener{conn: conn}
+ go Serve(ln, HandlerFunc(func(w ResponseWriter, r *Request) {
+ if _, ok := r.Header["Expect"]; !ok {
+ t.Error("Expect header should not be filtered out")
+ }
+ }))
+ <-conn.closec
+}
+
func TestIssue11549_Expect100(t *testing.T) {
req := reqBytes(`PUT /readbody HTTP/1.1
User-Agent: PycURL/7.22.0
diff --git a/src/net/http/server.go b/src/net/http/server.go
index ac7086c21e..19324d02c4 100644
--- a/src/net/http/server.go
+++ b/src/net/http/server.go
@@ -1452,7 +1452,6 @@ func (c *conn) serve() {
// Wrap the Body reader with one that replies on the connection
req.Body = &expectContinueReader{readCloser: req.Body, resp: w}
}
- req.Header.Del("Expect")
} else if req.Header.get("Expect") != "" {
w.sendExpectationFailed()
return