考虑以下代码:当我 GEThttp://localhost:8080/或http://localhost:8080/foo一切按预期工作时。但是当我使用 HEAD http 方法时,http://localhost:8080/foo工作但http://localhost:8080/中断(主程序退出,我收到此错误:'template: main.html:1:0: execution "main.html" at <"homeHandler">: http: request方法或响应状态代码不允许正文')。这两者之间的区别在于一种情况下使用模板 ( /) 而另一种情况下使用简单字符串 ( /foo)。
在我的代码中,我广泛使用模板,所以看起来我必须明确要求该方法并返回“200”(或适当的代码)。有没有办法让模板和 HEAD 方法的自动处理?
我尝试了这些测试:curl http://localhost:8080/foo -I(-I用于HEAD方法)。
package main
import (
"html/template"
"log"
"net/http"
)
var (
templates *template.Template
)
// OK, HEAD + GET work fine
func fooHandler(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("fooHandler"))
}
// GET works fine, HEAD results in an error:
// template: main.html:1:0: executing "main.html" at <"homeHandler">:
// http: request method or response status code does not allow body
func homeHandler(w http.ResponseWriter, req *http.Request) {
err := templates.ExecuteTemplate(w, "main.html", nil)
if err != nil {
log.Fatal(err)
}
}
func main() {
var err error
templates, err = template.ParseGlob("templates/*.html")
if err != nil {
log.Fatal("Loading template: ", err)
}
http.HandleFunc("/", homeHandler)
http.HandleFunc("/foo", fooHandler)
http.ListenAndServe(":8080", nil)
}
main.html子目录中的文件templates就是这个字符串:homeHandler
萧十郎
相关分类