2016-07-19 44 views
3

golangフレームワークginを使用してgzip応答を返そうとしています。golang ginフレームワークのgzip応答を戻す方法

彼らはここでは例を提供します。 https://github.com/gin-gonic/contrib/blob/master/gzip/example/example.go

package main 

import (
    "fmt" 
    "github.com/gin-gonic/contrib/gzip" 
    "github.com/gin-gonic/gin" 
    "time" 
) 

func main() { 
    r := gin.Default() 
    r.Use(gzip.Gzip(gzip.DefaultCompression)) 
    r.GET("/ping", func(c *gin.Context) { 
     c.String(200, "pong "+fmt.Sprint(time.Now().Unix())) 
    }) 

    // Listen and Server in 0.0.0.0:8080 
    r.Run(":8080") 
} 

私はそのはgzip圧縮されたコンテンツを返さないこの例を使用しています。私はカール

curl -v -H "Accept-Encoding: gzip" 'http://localhost:8080/ping' 

Trying ::1... 
Connected to localhost (::1) port 8080 (#0) GET /ping HTTP/1.1 Host: localhost:8080 User-Agent: curl/7.43.0 Accept:/Accept-Encoding: gzip 
< HTTP/1.1 200 OK 
< Content-Encoding: gzip 
< Content-Type: text/plain; charset=utf-8 
< Vary: Accept-Encoding 
< Date: Mon, 18 Jul 2016 17:20:56 GMT 
< Content-Length: 38 
< 

Connection #0 to host localhost left intact pong 1468862456?n???? 

お知らせコンテンツはgzip圧縮されたとのコメントを追加余分なジャンク文字があるされていないから、次のような出力を得る上記のコードでは

"?n ????"

これまでのところ、gzipを返す方法を理解できません。私は、サンプルコードに間違いがあると思いますが、私はそれを理解するのに問題があります。

ありがとうございます。

答えて

1

他の人がgzipに問題がありました。彼らの引き取り要求は、私にとってこの問題を解決しました。これはginフレームワークのgzipパッケージのバグです。

このメソッドは、プル要求を含む、元の問題へのcontrib/GZIP/gzip.go

func (g *gzipWriter) WriteString(s string) (n int, err error) { 
    return g.writer.Write([]byte(s)) 
} 

リンクから欠落していました。 https://github.com/gin-gonic/contrib/pull/59

プロジェクトのオーナーがプルリクエストを受け入れると、この問題は解決されます。

関連する問題