2016-07-19 2 views
3

golang 프레임 워크 gin을 사용하여 gzip 응답을 반환하려고합니다.golang gin framework에 대한 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

프로젝트 소유자가 끌어 오기 요청을 수락하면이 문제가 해결됩니다.