diff options
| author | Russ Cox <rsc@golang.org> | 2010-01-06 15:45:30 -0800 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2010-01-06 15:45:30 -0800 |
| commit | 968d6a6d5ae7df7b7b079636d4cdef7836db90cc (patch) | |
| tree | 984cccf01ce75a06e71526a5a16f8d277ab963e0 /src/pkg/http/request.go | |
| parent | 690fcacdd30b36a9a72e2f6935a2ba643152fd00 (diff) | |
| download | go-968d6a6d5ae7df7b7b079636d4cdef7836db90cc.tar.xz | |
http: avoid header duplication - take struct fields out of Header map
R=r
CC=golang-dev, petar-m
https://golang.org/cl/183132
Diffstat (limited to 'src/pkg/http/request.go')
| -rw-r--r-- | src/pkg/http/request.go | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/pkg/http/request.go b/src/pkg/http/request.go index bf1e299d71..10dc08c2bd 100644 --- a/src/pkg/http/request.go +++ b/src/pkg/http/request.go @@ -160,6 +160,11 @@ func (req *Request) Write(w io.Writer) os.Error { // Response.{GetHeader,AddHeader} and string constants for "Host", // "User-Agent" and "Referer". for k, v := range req.Header { + // Host, User-Agent, and Referer were sent from structure fields + // above; ignore them if they also appear in req.Header. + if k == "Host" || k == "User-Agent" || k == "Referer" { + continue + } io.WriteString(w, k+": "+v+"\r\n") } @@ -497,8 +502,11 @@ func ReadRequest(b *bufio.Reader) (req *Request, err os.Error) { // GET http://www.google.com/index.html HTTP/1.1 // Host: doesntmatter // the same. In the second case, any Host line is ignored. - if v, present := req.Header["Host"]; present && req.URL.Host == "" { - req.Host = v + if v, present := req.Header["Host"]; present { + if req.URL.Host == "" { + req.Host = v + } + req.Header["Host"] = "", false } // RFC2616: Should treat @@ -525,9 +533,11 @@ func ReadRequest(b *bufio.Reader) (req *Request, err os.Error) { // Pull out useful fields as a convenience to clients. if v, present := req.Header["Referer"]; present { req.Referer = v + req.Header["Referer"] = "", false } if v, present := req.Header["User-Agent"]; present { req.UserAgent = v + req.Header["User-Agent"] = "", false } // TODO: Parse specific header values: |
