如何在Go-chi中启用gzip压缩中间件

如何使用go-chi框架的gzip中间件启用gzip压缩?</ p>
\ n

尝试使用此处显示的示例:</ p>

https://github.com/go-chi/chi/issues/204 </ p>

但是当我用curl检查时,我得到了:</ p> \ n

  $ curl -H“接受编码:gzip” -I http://127.0.0.1:3333
HTTP/1.1 405不允许使用的方法
日期:星期六,2019年8月31日19:06 :39 GMT
</ code> </ pre>

我尝试了代码“ hello world”:</ p>

  package main 

import(

“ net / http”

“ github.com/go-chi/chi"
” github.com/go-chi/chi/middleware"
)

func main(){
r := chi.NewRouter()
r.Use(middleware.RequestID)
r.Use(middleware.Logger)
//r.Use(middleware.DefaultCompress)//使用此方法会产生相同的结果
r .Use(middleware.Compress(5,“ gzip”))
r.Get(“ /”,Hello)
http.ListenAndServe(“:3333”,r)
}

func Hello(w http.ResponseWriter,r * http.Request){
w.Header()。Set(“ Content-Type”,“ text / html”)//根据文档,必须在此处启用gzip
w。 Write([] byte(“ hello world
”))
}
</ code> </ pre>

但是当我尝试使用curl进行验证时,结果是相同的</ p>

  $ curl -H“接受编码:gzip” -I http://127.0.0.1:3333
HTTP/1.1 405不允许使用的方法
日期:2019年8月31日,星期六 19:06:39 GMT
</ code> </ pre>

怎么回事?</ p>
</ div>

展开原文

原文

How can I enable gzip compression using the gzip middleware of the go-chi framework?

Try using the example shown here:

https://github.com/go-chi/chi/issues/204

but when I check with curl, I get this:

$ curl -H "Accept-Encoding: gzip" -I http://127.0.0.1:3333
HTTP/1.1 405 Method Not Allowed
Date: Sat, 31 Aug 2019 19:06:39 GMT

I tried the code "hello world":

package main

import (
    "net/http"

    "github.com/go-chi/chi"
    "github.com/go-chi/chi/middleware"
)

func main() {
    r := chi.NewRouter()
    r.Use(middleware.RequestID)
    r.Use(middleware.Logger)
    //r.Use(middleware.DefaultCompress) //using this produces the same result
    r.Use(middleware.Compress(5, "gzip"))
    r.Get("/", Hello)
    http.ListenAndServe(":3333", r)
}

func Hello(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type", "text/html") //according to the documentation this must be here to enable gzip
    w.Write([]byte("hello world
"))
}

but when I try to verify with curl, the result is the same

$ curl -H "Accept-Encoding: gzip" -I http://127.0.0.1:3333
HTTP/1.1 405 Method Not Allowed
Date: Sat, 31 Aug 2019 19:06:39 GMT

what's going on?

dsgw8802
dsgw8802 谢谢您的回答,现在我更了解了
12 个月之前 回复
duancifu6769
duancifu6769 另外,当您想要压缩的响应正文时,发出HEAD而不是GET是没有意义的,因为HEAD根本没有响应正文。
12 个月之前 回复
douben6670
douben6670 这个问题与gzip完全无关。您正在发出HEAD请求,但您的服务器不接受HEAD,它期望GET。
12 个月之前 回复

1个回答

Use the commented middleware.DefaultCompress and a normal GET request.

package main

import (
    "net/http"

    "github.com/go-chi/chi"
    "github.com/go-chi/chi/middleware"
)

func main() {
    r := chi.NewRouter()
    r.Use(middleware.RequestID)
    r.Use(middleware.Logger)
    r.Use(middleware.DefaultCompress)
    r.Get("/", Hello)
    http.ListenAndServe(":3333", r)
}

func Hello(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/html")
    w.Write([]byte("hello world
"))
}

Try with curl:

$ curl -v http://localhost:3333 --compressed
* Rebuilt URL to: http://localhost:3333/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 3333 (#0)
> GET / HTTP/1.1
> Host: localhost:3333
> User-Agent: curl/7.58.0
> Accept: */*
> Accept-Encoding: deflate, gzip
>
< HTTP/1.1 200 OK
< Content-Encoding: gzip
< Content-Type: text/html
< Date: Sat, 31 Aug 2019 23:37:52 GMT
< Content-Length: 36
<
hello world
* Connection #0 to host localhost left intact

Or HTTPie:

$ http :3333
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 36
Content-Type: text/html
Date: Sat, 31 Aug 2019 23:38:31 GMT

hello world
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问