使用 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).