duandong7980 2019-08-31 19:14
浏览 158
已采纳

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

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?

  • 写回答

1条回答 默认 最新

  • doucong8553 2019-08-31 23:39
    关注

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c