使用自定义状态代码提供html文件

时间:2018-01-14 18:44:21

标签: go http-status-code-404

我需要一个自定义的未找到的html页面。这是我尝试过的:

package main

import (
    "net/http"

    "github.com/julienschmidt/httprouter"
)

func main() {
    r := httprouter.New()

    r.NotFound = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(404)
        http.ServeFile(w, r, "files/not-found.html")
    })

    http.ListenAndServe(":8000", r)
}

我有一行w.WriteHeader(404)以确保状态代码为404,但上面的代码给出了错误:

  

http:多个response.WriteHeader调用

没有行w.WriteHeader(404)没有错误,页面显示正确,但状态代码是200.我希望它是404。

2 个答案:

答案 0 :(得分:0)

您只需自己编写内容即可。

类似的东西:

r.NotFound = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        contents, err := ioutil.ReadFile("files/not-found.html")
        if err != nil {
            panic(err) // or do something useful
        }
        w.WriteHeader(404)
        w.Header().Set("Content-Type", "text/html; charset=utf-8")
        w.Write(contents)
    })

答案 1 :(得分:0)

大卫的回答是有效的,这是另一种方式。

// other header stuff
w.WriteHeader(http.StatusNotFound)
file, err := os.Open("files/not-found.html")
if err != nil {
    log.Println(err)
    return
}
_, err = io.Copy(w, file)
if err != nil {
    log.Println(err)
}
file.Close() // consider defer ^