use*_*499 4 http go http-headers
我正在尝试在每个响应上设置服务器标头。我正在尝试使用Gin 中间件来实现这一目标。但是,由于某种原因,这不会设置标头。到目前为止,我已经尝试对此进行调试,但我无法理解为什么这不起作用。也许我在这里遗漏了一些东西。
\n\n这是代码
\n\npackage main\n\nimport "fmt"\nimport "github.com/gin-gonic/gin"\n\nconst SERVER_INFO = "Some-Play-Server"\n\ntype ServerHeader struct {\n gin.ResponseWriter\n ServerInfo string\n}\n\nfunc (w *ServerHeader) Write(data []byte) (int, error) {\n if w.Header().Get("Server") == "" {\n w.Header().Add("Server", w.ServerInfo)\n }\n\n return w.ResponseWriter.Write(data)\n}\n\nfunc InitServerHeader() gin.HandlerFunc {\n return func(c *gin.Context) {\n writer := &ServerHeader{c.Writer, SERVER_INFO}\n c.Writer = writer\n c.Next()\n }\n}\n\nfunc main() {\n mux := gin.Default()\n mux.Use(InitServerHeader())\n mux.GET("/", func(c *gin.Context) {\n c.String(200, "OK")\n })\n\n fmt.Println("Server Listening on 0.0.0.0:8080")\n mux.Run(":8080")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n而且,这是测试输出
\n\n\xe2\x9d\xaf curl -v http://localhost:8080/\n* About to connect() to localhost port 8080 (#0)\n* Connected to localhost (::1) port 8080 (#0)\n> GET / HTTP/1.1\n> User-Agent: curl/7.30.0\n> Host: localhost:8080\n> Accept: */*\n> \n< HTTP/1.1 200 OK\n< Content-Type: text/plain\n< Date: Wed, 13 Aug 2014 16:54:21 GMT\n< Content-Length: 2\n< \nOK\n
Run Code Online (Sandbox Code Playgroud)\n
小智 5
这里 Gin 的创建者:不要覆盖 c.Writer,这会带来太多的开销和不必要的复杂性。如果您想支持透明的 gzip 压缩或缓存,则应覆盖 writer(请参阅 gzip 中间件)。如果你想添加标题,只需这样做:
func main() {
mux := gin.Default()
mux.Use(serverHeader)
mux.GET("/", func(c *gin.Context) {
c.String(200, "OK")
})
mux.Run(":8080")
}
func serverHeader(c *gin.Context) {
// shortcut for c.Writer.Header().Set("Server", "Some-Play-Server")
c.Header("Server", "Some-Play-Server")
}
Run Code Online (Sandbox Code Playgroud)
完毕!由于它作为全局中间件附加,因此所有响应都将包含服务器标头,即使在提供静态文件时也是如此!
归档时间: |
|
查看次数: |
8472 次 |
最近记录: |