Golang http 开启 gzip_疯疯癫癫的博客-CSDN博客


本站和网页 https://blog.csdn.net/fengfengdiandia/article/details/82106731 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Golang http 开启 gzip_疯疯癫癫的博客-CSDN博客
Golang http 开启 gzip
疯疯癫癫
于 2018-08-27 08:25:37 发布
7690
收藏
分类专栏:
Golang
文章标签:
golang
http
gzip
benchmark
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fengfengdiandia/article/details/82106731
版权
Golang
专栏收录该内容
16 篇文章
0 订阅
订阅专栏
一. 测试代码
1.1. http 开启 gzip 数据大小对比1.2. http 开启 gzip benchmark 对比 参考
一. 测试代码
package gzip
import (
"compress/gzip"
"fmt"
"io/ioutil"
"log"
"net/http"
func RequestGzip(enable bool) (int, error) {
client := http.Client{}
req, err := http.NewRequest("GET", "http://www.baidu.com", nil)
if enable { // 请求 header 添加 gzip
req.Header.Add("Content-Encoding", "gzip")
req.Header.Add("Accept-Encoding", "gzip")
resp, err := client.Do(req)
if err != nil {
fmt.Println("client.Do Error:", err)
return 0, err
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("ioutil.ReadAll Error", err)
return 0, err
return len(body), nil
// client 解析 gzip 返回
func ClientUncompress() {
client := http.Client{}
req, err := http.NewRequest("GET", "http://www.baidu.com", nil)
req.Header.Add("Content-Encoding", "gzip")
req.Header.Add("Accept-Encoding", "gzip")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
defer resp.Body.Close()
var buf [1024 * 1024]byte
reader, err := gzip.NewReader(resp.Body)
if err != nil {
log.Fatal(err)
_, err = reader.Read(buf[:])
if err != nil {
log.Fatal(err)
reader.Close()
// client 正常解析返回
func ClientNormal() {
client := http.Client{}
req, err := http.NewRequest("GET", "http://www.baidu.com", nil)
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
defer resp.Body.Close()
var buf [1024 * 1024]byte
_, err = resp.Body.Read(buf[:])
if err != nil {
log.Fatal(err)
resp.Body.Close()
1.1. http 开启 gzip 数据大小对比
package gzip
import (
"testing"
func TestRequestGzip(t *testing.T) {
length, err := RequestGzip(true) // 开启 gzip
if err != nil {
t.Error(err)
t.Logf("Request with gzip length: %d", length)
length, err = RequestGzip(false) // 未开启 gzip
if err != nil {
t.Error(err)
t.Logf("Request without gzip length: %d", length)
go test -v .
=== RUN TestRequestGzip
--- PASS: TestRequestGzip (0.05s)
gzip_test.go:12: Request with gzip length: 32168
gzip_test.go:18: Request without gzip length: 118315
PASS
可以看到返回的数据压缩前大小 118315,压缩后 32168。
1.2. http 开启 gzip benchmark 对比
压缩后数据量变小了,但解压缩会稍稍降低性能。
package gzip
import "testing"
func BenchmarkClientUncompress(b *testing.B) {
for i := 0; i < b.N; i++ {
ClientUncompress()
func BenchmarkClientNormal(b *testing.B) {
for i := 0; i < b.N; i++ {
ClientNormal()
go test -bench=. -run=none
goos: darwin
goarch: amd64
BenchmarkClientUncompress-8 100 19972186 ns/op
BenchmarkClientNormal-8 100 17922070 ns/op
PASS
参考
https://golang.org/pkg/compress/gzip/
疯疯癫癫
关注
关注
点赞
收藏
打赏
知道了
评论
Golang http 开启 gzip
一. 测试代码1.1. http 开启 gzip 数据大小对比1.2. http 开启 gzip benchmark 对比参考一. 测试代码package gzipimport ( "compress/gzip" "fmt" "io/ioutil" "log" "net/http")func RequestGzip...
复制链接
扫一扫
专栏目录
gziphandler:将中间件转换为gzip HTTP响应
02-03
Gzip处理程序
这是一个很小的Go包,它包装HTTP处理程序以透明地gzip响应主体,以支持响应主体。 尽管通常将其留给反向代理(例如nginx或Varnish)较为简单,但在不希望使用此软件包时,它很有用。
安装
go get -u github.com/NYTimes/gziphandler
用法
使用任何处理程序(实现http.Handler接口的对象)调用GzipHandler ,它将返回一个新的处理程序,该处理程序对响应进行gzip处理。 例如:
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,
gzip:用于Gin和nethttp的Golang gzip中间件| Golang gzip中间件,支持Gin和nethttp,开箱即用同时可定制
02-03
English |
Go的Gzip中间件
现成的,也是可定制的和gzip中间件。
例子
使用DefaultHandler()创建一个现成的gzip中间件。
杜松子酒
import github . com / nanmu42 / gzip
func main () {
g := gin . Default ()
// use default settings
g . Use ( gzip . DefaultHandler (). Gin )
g . GET ( "/" , func ( c * gin. Context ) {
c . JSON ( http . Statu
参与评论
您还未登录,请先
登录
后发表或查看评论
golang http client 使用gzip_Go实战--使用之gorilla/context
weixin_39628551的博客
11-30
229
感慨:小说《人间失格》保温杯,枸杞中兴程序员跳楼朴树演到“情千缕,酒一杯,声声离笛催”时的哽咽《芳华》,芳华已逝,面目全非……哎,生活不易。生命不止,继续 go go go ~~~接下来打算跟大家分享一系列Gorilla web toolkit。gorilla是用golang写的web工具箱,里面提供了一系列的工具。在用golang开发web中,搭配gorilla可以加快整个开发的进程。官网:ht...
【golang/http】对http返回内容进行压缩
最新发布
o0o
08-31
855
【代码】【golang/http】对http返回内容进行压缩。
双端开启GZIP压缩
大帅的博客
11-01
440
为什么要开启双端GZIP压缩?
因为压缩之后的文件或者js体积小,传输速度快,占用带宽更小,可以系统提高吞吐量(并发访问量)
怎样判断是否开启双端压缩了,或者看支持哪种压缩?
一般情况,会查看前端请求,如果前端支持压缩会显示Accept-Encoding:gzip,用户说明接受哪些压缩方法
后端会给前端请求返回响应Content-Encoding: gzip,deflate表明后端服务支持哪...
golang http client 使用gzip_HTTP协议及框架实现
weixin_39670267的博客
12-01
500
一、HTTP协议描述在OSI网络模型,HTTP协议运行于网络层,交换数据由以下几步client向server发送requestserver从socket里读取requestserver生成responseserver将response写入socketclient从socket里读取responsesocket由二元组 (ip, port) 组成,client, server端各自管理一个socke...
golang http请求Accept-Encoding:gzip未解压问题
shumoyin的博客
10-27
2473
文章目录1. 问题描述2. 代码示例
1. 问题描述
golang在使用net/http发送http请求时,如果请求头中包含Accept-Encoding: gzip,且请求服务支持gzip压缩,那么在解析请求返回值时,需要手动解压
2. 代码示例
package test
import (
"bytes"
"compress/gzip"
"fmt"
"github.com/pkg/errors"
"io"
"io/ioutil"
"net/http
类型安全的 Go HTTP 请求
萌兔兔MMQ!!
05-23
252
前言
对 Gopher 来说,虽然我们基本都是在写代码让别人来请求,但是有时候,我们也需要去请求第三方提供的 RESTful 接口,这个时候,我们才能感受到前端同学拼接 HTTP 请求参数的痛苦。
比如,我们要发起类似这样一个请求,看起来很简单,实际写起来还是比较繁琐的。
POST /articles/5/update?device=ios HTTP/1.1
Host: go-zero.dev
Authorization: Bearer
{“author”:“kevin”,“body”:“this is
Golang Http 验证码示例实现
09-16
主要介绍了Golang Http 验证码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
详解Golang开启http服务的三种方式
09-16
主要介绍了详解Golang开启http服务的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
golang http连接复用方法
09-19
今天小编就为大家分享一篇golang http连接复用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
【Golang】Http请求返回结果处理
01-08
在 Go 中 Http 请求的返回结果为 *http.Response 类型,Response.Body 类型为 io.Reader,把请求结果转化为Map需要进行一些处理。 写一个公共方法来进行Response转Map处理: package util import ( encoding/json ...
golang_http_client
01-08
golang_http_client
Golang gzip压缩的一个问题
云上的日子
01-22
4862
func (b *MyBucket) Gzip(data []byte) []byte {
var res bytes.Buffer
gz, _ := gzip.NewWriterLevel(&res, 7)
_, err := gz.Write(data)
if err != nil {
Log4e(err)
} else {
探索HTTP传输中gzip压缩的秘密
KHOST的博客
02-22
960
我们给某人发送邮件时,我们在传输之前把自己的文件压缩一下,接收方收到文件后再去解压获取文件。这中操作对于我们来说都已经司空见惯。我们压缩文件的目的就是为了把传输文件的体积减小,加快传输速度。我们在 http 传输中开启 gZip的目的也是如此,但是一般文章介绍 gZip 时候总是结合一些服务端配置(nginx)或者构建工具插件(webpack)来说,列出一大堆配置让人看的云里雾里,以至于到最后还没...
go http client & server gzip数据压缩格式
qq_17303159的博客
01-01
911
server端:
package main
import (
"compress/gzip"
"fmt"
"io/ioutil"
"net/http"
func handler(w http.ResponseWriter, req *http.Request) {
reader, e := gzip.NewReader(req.Body)
if e!= nil{
_, _ = fmt.Fprint(w, e.Error())
return
all, e := i
golang http gzip
weixin_30482383的博客
11-15
904
当我们用http发送消息时,可以指定为gzip压缩,对数据进行压缩后再传输不仅可以节省带宽还可以加快传输速度,对于双方而言都是一件能够取得更大收益的事情。
废话不多说,直接上代码
http_server.go
1 package main
3 import (
4 "compress/gzip"
5 "fmt"
6 "io"
7 ...
Java和Go的gzip使用_记一次golang的gzip优化
weixin_32915575的博客
02-27
512
背景近期使用Golang官方的"compress/gzip"包对数据压缩返回给App,此场景特性:数据不固定、高并发。在实际过程中发现一个简单逻辑的API服务,几百QPS的情况下CPU却很高达到几个核负载。问题追踪通过golang自带工具pprof抓图分析CPU,如下图(由于有业务代码,所以部分信息遮盖了):通过此图可以看出,整个工程里有两个CPU消耗大头:1)GC高 2)大部分CPU耗在Gzip...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
疯疯癫癫
CSDN认证博客专家
CSDN认证企业博客
码龄12年
暂无认证
65
原创
9万+
周排名
178万+
总排名
44万+
访问
等级
4308
积分
174
粉丝
100
获赞
159
评论
362
收藏
私信
关注
热门文章
invalid use of non-static member function
43826
VMware下安装MS-DOS7.10
22905
netmap 介绍
22401
C++ split() 函数
21156
使用 twilio + python 给你的手机发短信
18030
分类专栏
内核驱动
3篇
引导启动
1篇
工作日记
3篇
UEFI
1篇
Linux
2篇
Code
3篇
Golang
16篇
Algorithm
1篇
Git
2篇
Python
1篇
Netmap
6篇
Machine Learning
1篇
Regex
1篇
C++
9篇
CI
1篇
Redis
3篇
DPDK
3篇
CDN
Tool
2篇
Docker
2篇
OpenResty
1篇
Protocol
5篇
闭包
1篇
closure
1篇
kubernetes
最新评论
编译 arm 版 perl
lililirururu:
能给个perl源码包吗?
VMware下安装MS-DOS7.10
小白老李:
没积分咋整
invalid use of non-static member function
cute_me:
狠狠点赞
编译 arm 版本 protobuf
weixin_53708129:
sudo apt install g++-arm-linux-gnueabihf !!
Golang panic 打印堆栈信息
少年的小俊:
GO 的这个异常捕获和处理方式真是垃圾一坨
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
编译 arm 版 perl
C++ 返回值优化
编译 arm 版本 protobuf
2019年6篇
2018年23篇
2017年12篇
2016年20篇
2013年4篇
2012年8篇
目录
目录
分类专栏
内核驱动
3篇
引导启动
1篇
工作日记
3篇
UEFI
1篇
Linux
2篇
Code
3篇
Golang
16篇
Algorithm
1篇
Git
2篇
Python
1篇
Netmap
6篇
Machine Learning
1篇
Regex
1篇
C++
9篇
CI
1篇
Redis
3篇
DPDK
3篇
CDN
Tool
2篇
Docker
2篇
OpenResty
1篇
Protocol
5篇
闭包
1篇
closure
1篇
kubernetes
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
打赏作者
疯疯癫癫
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值