mirror of
https://github.com/golang/go
synced 2024-11-22 03:34:40 -07:00
http: handle HEAD requests correctly
R=r, r2 CC=golang-dev https://golang.org/cl/3939042
This commit is contained in:
parent
97025ebfef
commit
cdb0bbf4d5
@ -174,7 +174,9 @@ func serveFile(w ResponseWriter, r *Request, name string, redirect bool) {
|
|||||||
|
|
||||||
w.WriteHeader(code)
|
w.WriteHeader(code)
|
||||||
|
|
||||||
io.Copyn(w, f, size)
|
if r.Method != "HEAD" {
|
||||||
|
io.Copyn(w, f, size)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServeFile replies to the request with the contents of the named file or directory.
|
// ServeFile replies to the request with the contents of the named file or directory.
|
||||||
|
@ -181,7 +181,9 @@ func (c *conn) readRequest() (w *response, err os.Error) {
|
|||||||
w.SetHeader("Content-Type", "text/html; charset=utf-8")
|
w.SetHeader("Content-Type", "text/html; charset=utf-8")
|
||||||
w.SetHeader("Date", time.UTC().Format(TimeFormat))
|
w.SetHeader("Date", time.UTC().Format(TimeFormat))
|
||||||
|
|
||||||
if req.ProtoAtLeast(1, 1) {
|
if req.Method == "HEAD" {
|
||||||
|
// do nothing
|
||||||
|
} else if req.ProtoAtLeast(1, 1) {
|
||||||
// HTTP/1.1 or greater: use chunked transfer encoding
|
// HTTP/1.1 or greater: use chunked transfer encoding
|
||||||
// to avoid closing the connection at EOF.
|
// to avoid closing the connection at EOF.
|
||||||
w.chunking = true
|
w.chunking = true
|
||||||
@ -268,7 +270,7 @@ func (w *response) Write(data []byte) (n int, err os.Error) {
|
|||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if w.status == StatusNotModified {
|
if w.status == StatusNotModified || w.req.Method == "HEAD" {
|
||||||
// Must not have body.
|
// Must not have body.
|
||||||
return 0, ErrBodyNotAllowed
|
return 0, ErrBodyNotAllowed
|
||||||
}
|
}
|
||||||
@ -495,11 +497,11 @@ func Redirect(w ResponseWriter, r *Request, url string, code int) {
|
|||||||
|
|
||||||
// RFC2616 recommends that a short note "SHOULD" be included in the
|
// RFC2616 recommends that a short note "SHOULD" be included in the
|
||||||
// response because older user agents may not understand 301/307.
|
// response because older user agents may not understand 301/307.
|
||||||
note := "<a href=\"" + htmlEscape(url) + "\">" + statusText[code] + "</a>.\n"
|
// Shouldn't send the response for POST or HEAD; that leaves GET.
|
||||||
if r.Method == "POST" {
|
if r.Method == "GET" {
|
||||||
note = ""
|
note := "<a href=\"" + htmlEscape(url) + "\">" + statusText[code] + "</a>.\n"
|
||||||
|
fmt.Fprintln(w, note)
|
||||||
}
|
}
|
||||||
fmt.Fprintln(w, note)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func htmlEscape(s string) string {
|
func htmlEscape(s string) string {
|
||||||
|
Loading…
Reference in New Issue
Block a user