summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetar Maymounkov <petarm@gmail.com>2010-01-29 16:51:42 -0800
committerPetar Maymounkov <petarm@gmail.com>2010-01-29 16:51:42 -0800
commit58e8cb4e2a0fa2ad4db8a53de275a66d2067900a (patch)
treebd2cac29ed05c4ae9fa13f59dbd572c097b87b6d
parente41b5c5eb637ca09ca2e88aa92ce999524227e7a (diff)
downloadgolang-58e8cb4e2a0fa2ad4db8a53de275a66d2067900a.tar.gz
http: increase header line limit, let req.Host override req.URL.Host
Fixes issue 566. R=rsc CC=golang-dev http://codereview.appspot.com/194074 Committer: Russ Cox <rsc@golang.org>
-rw-r--r--src/pkg/http/request.go15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/pkg/http/request.go b/src/pkg/http/request.go
index 57ea6d0ac..c84622d06 100644
--- a/src/pkg/http/request.go
+++ b/src/pkg/http/request.go
@@ -22,8 +22,8 @@ import (
)
const (
- maxLineLength = 1024 // assumed < bufio.DefaultBufSize
- maxValueLength = 1024
+ maxLineLength = 4096 // assumed <= bufio.defaultBufSize
+ maxValueLength = 4096
maxHeaderLines = 1024
chunkSize = 4 << 10 // 4 KB chunks
)
@@ -128,6 +128,7 @@ const defaultUserAgent = "Go http package"
// Write writes an HTTP/1.1 request -- header and body -- in wire format.
// This method consults the following fields of req:
+// Host
// URL
// Method (defaults to "GET")
// UserAgent (defaults to defaultUserAgent)
@@ -138,13 +139,18 @@ const defaultUserAgent = "Go http package"
// If Body is present, Write forces "Transfer-Encoding: chunked" as a header
// and then closes Body when finished sending it.
func (req *Request) Write(w io.Writer) os.Error {
+ host := req.Host
+ if host == "" {
+ host = req.URL.Host
+ }
+
uri := urlEscape(req.URL.Path, false)
if req.URL.RawQuery != "" {
uri += "?" + req.URL.RawQuery
}
fmt.Fprintf(w, "%s %s HTTP/1.1\r\n", valueOrDefault(req.Method, "GET"), uri)
- fmt.Fprintf(w, "Host: %s\r\n", req.URL.Host)
+ fmt.Fprintf(w, "Host: %s\r\n", host)
fmt.Fprintf(w, "User-Agent: %s\r\n", valueOrDefault(req.UserAgent, defaultUserAgent))
if req.Referer != "" {
@@ -507,8 +513,9 @@ 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.
+ req.Host = req.URL.Host
if v, present := req.Header["Host"]; present {
- if req.URL.Host == "" {
+ if req.Host == "" {
req.Host = v
}
req.Header["Host"] = "", false