aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/http/request.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-01-06 15:45:30 -0800
committerRuss Cox <rsc@golang.org>2010-01-06 15:45:30 -0800
commit968d6a6d5ae7df7b7b079636d4cdef7836db90cc (patch)
tree984cccf01ce75a06e71526a5a16f8d277ab963e0 /src/pkg/http/request.go
parent690fcacdd30b36a9a72e2f6935a2ba643152fd00 (diff)
downloadgo-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.go14
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: