我开始用Go编写服务器端应用程序。我想使用Accept-Encoding
请求头来确定是否使用GZIP
压缩响应实体。我曾希望找到一种直接使用http.Serve
或http.ServeFile
方法来完成此任务的方法。
这是一个相当普遍的需求;我是否遗漏了什么,或者我是否需要推出我自己的解决方案?
发布于 2012-12-29 07:17:43
目前还没有对gzip压缩的HTTP响应的“开箱即用”支持。但是添加它是相当微不足道的。看一看
https://gist.github.com/the42/1956518
也是
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/cgUp8_ATNtc
发布于 2015-12-20 00:45:56
“纽约时报”发布了他们的gzip middleware package for Go。
你只需通过他们的GzipHandler
传递你的http.HandlerFunc
,就完成了。它看起来是这样的:
package main
import (
"io"
"net/http"
"github.com/nytimes/gziphandler"
)
func main() {
withoutGz := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
io.WriteString(w, "Hello, World")
})
withGz := gziphandler.GzipHandler(withoutGz)
http.Handle("/", withGz)
http.ListenAndServe("0.0.0.0:8000", nil)
}
发布于 2020-07-16 20:48:21
为了完整起见,我最终用一个简单的、专门解决这个问题的处理程序回答了我自己的问题。
这提供来自Go http服务器的静态文件,包括要求的性能增强功能。它基于标准的net/http ServeFiles,具有gzip/brotli和缓存性能增强。
https://stackoverflow.com/questions/14073393
复制相似问题