【发布时间】:2021-02-14 14:37:04
【问题描述】:
无论我设置内容类型并编写状态代码,我都会收到此错误。我真的不知道为什么......
在我看来这是一项非常平凡的任务——我只想设置 Content-Type 和 http 状态代码。服务器确实可以正常工作,它可以很好地为网页提供服务,但是每次我请求该端点/路径时,它都会将该消息记录到终端。
错误
http: superfluous response.WriteHeader call from main.indexHandler (server.go:49)
代码
package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"time"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
fs := http.FileServer(http.Dir("./static"))
r.PathPrefix("/assets/").Handler(http.StripPrefix("/assets/", fs))
r.HandleFunc("/", indexHandler).Methods("GET")
server := &http.Server{
Addr: "0.0.0.0:8080",
Handler: r,
}
go func() {
if err := server.ListenAndServe(); err != nil {
log.Fatal("Unable to start the server")
}
}()
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
<-c
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
log.Fatal("Unable to gracefully shutdown the server")
}
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
w.WriteHeader(http.StatusOK)
http.ServeFile(w, r, "./static/index.html")
}
【问题讨论】:
-
不幸的是,它没有。我看不出我可以在哪里写多个标题 - 虽然很明显我错过了图片的一部分。
-
我已在您的评论中添加了针对特定问题的答案,但上面提供的链接仍然是有用的背景