代码拉取完成,页面将自动刷新
同步操作将从 楠木/gzip 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
English | 中文
一个开箱即用,可定制,适用于Gin和net/http的gzip中间件。
默认设置DefaultHandler()
可以满足大部分场景。
import github.com/nanmu42/gzip
func main() {
g := gin.Default()
// 使用默认设定
g.Use(gzip.DefaultHandler().Gin)
g.GET("/", func(c *gin.Context) {
c.JSON(http.StatusOK, map[string]interface{}{
"code": 0,
"msg": "hello",
"data": fmt.Sprintf("l%sng!", strings.Repeat("o", 1000)),
})
})
log.Println(g.Run(fmt.Sprintf(":%d", 3000)))
}
import github.com/nanmu42/gzip
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
writeString(w, fmt.Sprintf("This content is compressed: l%sng!", strings.Repeat("o", 1000)))
})
// 使用默认设定
log.Println(http.ListenAndServe(fmt.Sprintf(":%d", 3001), gzip.DefaultHandler().WrapHandler(mux)))
}
func writeString(w http.ResponseWriter, payload string) {
w.Header().Set("Content-Type", "text/plain; charset=utf8")
_, _ = io.WriteString(w, payload+"\n")
}
Handler
使用NewHandler()
可以定制参数以满足你的特殊需要:
import github.com/nanmu42/gzip
handler := gzip.NewHandler(gzip.Config{
// gzip压缩等级
CompressionLevel: 6,
// 触发gzip的最小body体积,单位:byte
MinContentLength: 1024,
// 请求过滤器基于请求来判断是否对这条请求的返回启用gzip,
// 过滤器按其定义顺序执行,下同。
RequestFilter: []RequestFilter{
NewCommonRequestFilter(),
DefaultExtensionFilter(),
},
// 返回header过滤器基于返回的header判断是否对这条请求的返回启用gzip
ResponseHeaderFilter: []ResponseHeaderFilter{
NewSkipCompressedFilter(),
DefaultContentTypeFilter(),
},
})
RequestFilter
和 ResponseHeaderFilter
是 interface.
你可以实现你自己的过滤器。
本中间件经过了性能调优,以确保高效运行,查看benchmark。
Content-Type
。虽然Handler会在Content-Type
缺失时使用http.DetectContentType()
进行猜测,但是效果并没有那么好;Content-Length
缺失时,Handler可能会缓冲返回的报文数据以决定报文是否大到值得进行压缩,如果MinContentLength
设置得太大,这个过程可能会带来内存压力。Handler针对这个情况做了一些优化,例如查看http.ResponseWriter.Write(data []byte)
在首次调用时的 len(data)
,以及资源复用。API已经稳定,1.x
版本中的更新会向前兼容。
在本项目的开发中,作者参考了下列项目和资料:
Logo在Gopherize.me生成。
MIT License
Copyright (c) 2019 LI Zhennan
Caddy is licensed under the Apache License
Copyright 2015 Light Code Labs, LLC
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。