使用 http.ServeFile 更改 HTTP 代码
Changing HTTP code with http.ServeFile
我正在用 Go 编写一个服务器,我目前正在实现错误页面(404、500 等)我有可以为这些错误提供服务的文件,但是如果我使用 http.ServeFile
然后我得到 HTTP 代码 200 而不是适当的代码。
有没有办法改变状态码,或者我需要为这个用例重写http.ServeFile
?
通过阅读源代码,我没有看到任何更改状态代码的方法(除了失败的方法,这意味着您将无法获得错误页面)。我认为这意味着如果提供了文件,那么它是 HTTP 200
这并非完全不合理。
我建议将错误页面文件读入字符串,然后使用此方法; https://golang.org/pkg/net/http/#Error
编辑:这实际上对您来说可能还不够具体。它希望将错误消息作为纯文本,所以我的建议可能是误用。在这种情况下,您将没有任何有用的抽象来做您想做的事。
作为对评论的回应,我个人的偏好是:
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/sendstrailers", func(w http.ResponseWriter, req *http.Request) {
resp := &http.Response{
StatusCode: 404,
}
resp.Write(w)
})
}
但您也可以只使用 w.WriteHeader(http.StatusForbidden)
或其他任何您喜欢的方式。无论您需要什么更好的套房。我的经验是在不同于多路复用器的范围内准备响应对象,因此我认为我更喜欢上面的部分(这比使用辅助方法 return 非结构化数据更有意义,然后将其写入responsewriter).
我正在用 Go 编写一个服务器,我目前正在实现错误页面(404、500 等)我有可以为这些错误提供服务的文件,但是如果我使用 http.ServeFile
然后我得到 HTTP 代码 200 而不是适当的代码。
有没有办法改变状态码,或者我需要为这个用例重写http.ServeFile
?
通过阅读源代码,我没有看到任何更改状态代码的方法(除了失败的方法,这意味着您将无法获得错误页面)。我认为这意味着如果提供了文件,那么它是 HTTP 200
这并非完全不合理。
我建议将错误页面文件读入字符串,然后使用此方法; https://golang.org/pkg/net/http/#Error
编辑:这实际上对您来说可能还不够具体。它希望将错误消息作为纯文本,所以我的建议可能是误用。在这种情况下,您将没有任何有用的抽象来做您想做的事。
作为对评论的回应,我个人的偏好是:
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/sendstrailers", func(w http.ResponseWriter, req *http.Request) {
resp := &http.Response{
StatusCode: 404,
}
resp.Write(w)
})
}
但您也可以只使用 w.WriteHeader(http.StatusForbidden)
或其他任何您喜欢的方式。无论您需要什么更好的套房。我的经验是在不同于多路复用器的范围内准备响应对象,因此我认为我更喜欢上面的部分(这比使用辅助方法 return 非结构化数据更有意义,然后将其写入responsewriter).