Go でサーバー側アプリケーションを書き始めています。Accept-Encoding
を使用して応答エンティティを圧縮するかどうかを決定するために、要求ヘッダーを使用したいと思いGZIP
ます。http.Serve
またはメソッドを使用して直接これを行う方法を見つけたいと思っていましたhttp.ServeFile
。
これは非常に一般的な要件です。私は何かを逃しましたか、それとも独自のソリューションを展開する必要がありますか?
New York Times がGo 用の gzip ミドルウェア パッケージをリリースしました。
あなたはあなたhttp.HandlerFunc
を彼らに渡すだけでGzipHandler
完了です。次のようになります。
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)
}
gzipで圧縮されたHTTP応答の「すぐに使える」サポートはまだありません。しかし、それを追加するのは非常に簡単です。見て
https://gist.github.com/the42/1956518
また
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/cgUp8_ATNtc
完全を期すために、私は最終的に、この問題の解決に特化したシンプルなハンドラーで自分の質問に答えました。
これは、要求されたパフォーマンス強化機能を含む、Go http サーバーからの静的ファイルを提供します。標準の net/http ServeFiles に基づいており、gzip/brotli とキャッシュ パフォーマンスが強化されています。