43

Go でサーバー側アプリケーションを書き始めています。Accept-Encodingを使用して応答エンティティを圧縮するかどうかを決定するために、要求ヘッダーを使用したいと思いGZIPます。http.Serveまたはメソッドを使用して直接これを行う方法を見つけたいと思っていましたhttp.ServeFile

これは非常に一般的な要件です。私は何かを逃しましたか、それとも独自のソリューションを展開する必要がありますか?

4

4 に答える 4

28

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)
}
于 2015-12-19T16:45:55.973 に答える
25

gzipで圧縮されたHTTP応答の「すぐに使える」サポートはまだありません。しかし、それを追加するのは非常に簡単です。見て

https://gist.github.com/the42/1956518

また

https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/cgUp8_ATNtc

于 2012-12-28T23:17:43.033 に答える
2

完全を期すために、私は最終的に、この問題の解決に特化したシンプルなハンドラーで自分の質問に答えました。

これは、要求されたパフォーマンス強化機能を含む、Go http サーバーからの静的ファイルを提供します。標準の net/http ServeFiles に基づいており、gzip/brotli とキャッシュ パフォーマンスが強化されています。

于 2020-07-16T12:48:21.023 に答える