【发布时间】:2015-05-28 17:07:08
【问题描述】:
我正在尝试在 go 中链接 HTTP 处理程序以提供一些附加功能,如下所示:
package router
import (
// snip
"github.com/gorilla/mux"
"github.com/gorilla/handlers"
"net/http"
)
// snip
r := mux.NewRouter()
/* routing code */
var h http.Handler
h = r
if useGzip {
h = handlers.CompressHandler(h)
}
if useLogFile {
fn := pathToLog
accessLog, err := os.OpenFile(fn, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
panic(err)
}
h = handlers.CombinedLoggingHandler(accessLog, h)
}
// etc...
问题是,如果 gorilla/mux 路由器指向的控制器之一已经设置了任何 HTTP 标头(例如,w.WriteHeader(404) 或 w.Header().Set("Content-Type", "application/json")) - 这会默默地破坏任何试图设置或添加自己的标题,如compress handler。我看不到任何错误,除非我忘记在某个地方捕获一个错误,但浏览器得到一个无效响应。
是否有任何优雅的方法来处理这个问题,而不是将标题存储在某个地方,然后让最终的处理程序来编写它们?这似乎意味着重写处理程序的代码,如果可能的话,我很想避免这种情况。
【问题讨论】:
标签: go http-headers gorilla