文档章节

HTTP Gzip压缩问题总结

-启曙-
 -启曙-
发布于 2015/11/21 10:35
字数 1053
阅读 111
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

昨天线上进行机房迁移,由于请求量不大,打算先用nginx进行转发。结果今天业务反馈,返回的数据,解析出来内容为乱码。

背景

上海机房由于网络不稳定,需要将机房迁移到无锡。上海机房使用F5进行转发和负载均衡,迁移到无锡机房由于资源限制,并且业务访问量不大,使用nginx进行转发和负载均衡。

但是在无锡机房启动后,发现部分业务收到的部分数据是乱码。具有一定的随机性

机房图

紧急处理方案

由于业务数据无法更新,紧急情况下切换上海机房,无锡机房暂时不启用。

问题跟踪与定位

整体回顾

从整个访问流程来看,只有中间的F5换成了Nginx,访问方PORTAL未变(无配置变动、无升级更新),服务提供方WX_GDC直接从SH_GDC拷贝过来(唯一的变化是数据库配置)。

初步分析

Nginx转发存在一些问题 WX_GDC数据库乱码。这个DBA很快确认没有乱码,焦点放到Nginx上。

大胆推测

Nginx在转发时HTTP协议某些处理有问题

小心求证

请出网络神器--tcpdump,抓包对比正常和异常的数据包。

2015-11-21 09:51:04.514918 IP 100.84.73.45.51377 > 100.84.73.34.9920: Flags [P.], seq 418240356:418240642, ack 340809695, win 1024, options [nop,nop,TS val 3214173339 ecr 3214153356], length 286
E..R.W@.@.KLdTI-dTI-..&....d.PW.....\G.....
..d.....POST /Application/pullConfig HTTP/1.1
Host: 100.84.73.34:9920
Accept-Encoding: gzip
Connection: keep-alive
Accept: */*
User-Agent: NING/1.0
Content-Length: 69
Content-Type: application/x-www-form-urlencoded

异常情况下的请求发送了 Accept-Encodeing: gzip

2015-11-21 09:24:02.983959 IP 100.84.73.50.54462 > 100.84.73.34.9920: Flags [P.], seq 1:301, ack 1, win 115, options [nop,nop,TS val 3212551808 ecr 3054521289], length 300
E..`.+@.@.0udTI-dTI"..&..M.WPR.....s\J.....
.{....POST /Application/pullConfig HTTP/1.1
Host: 100.84.73.34:9920
Connection: Keep-Alive

正常情况下的请求没有发送 Accept-Encodeing: gzip

瞬间意识到是由于nginx将请求结果进行了gzip压缩,但是为何有的业务可以正常处理,而又得业务得到结果为乱码。

向业务求证使用什么方式访问

无异常A业务答复:我们使用Java的原生URL类进行请求。

有异常的B业务答复:我们使用AsyncHttpClient进行请求。

查找AsyncHttpClient的使用,发现默认的方式是Accept-Encoding为gzip,但是需要在获取内容后,进行gzip解压。而B业务未进行相关的处理

这里有一篇文章讲的很好。http://www.cnblogs.com/TankXiao/archive/2012/11/13/2749055.html

深挖问题

B业务反馈其在部分情况下也是没有乱码的,看着具有随机性。为何会这样?

深入http gizp原理

翻阅nginx gzip的配置发现:gzip_min_length 配置,如果配置,则小于这个值不进行压缩,大于这个值进行压缩。

拓展学习

Nginx关于gzip的配置学习

  • gzip on; //该指令用于开启或关闭gzip模块(on/off)

  • gzip_min_length 1k; //设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。

  • gzip_buffers 4 16k; //设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。

  • gzip_http_version 1.1; //识别http的协议版本(1.0/1.1)

  • gzip_comp_level 2; //gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

  • gzip_types text/plain application/x-javascript text/css application/xml //匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。

  • gzip_vary on; //和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩

© 著作权归作者所有

-启曙-
粉丝 9
博文 20
码字总数 14950
作品 0
广州
程序员
私信 提问
squid配合nginx的gzip压缩的完美解决方案

Squid3.0之前,一直不能完美支持http1.1。所以对gzip内容的支持,始终有很多问题。我也看过很多帖子,号称解决了这个问题。但是其实一直没有把问题说清楚。我今天试着把问题的原因和解决方法...

范堡
2010/02/06
3.9K
1
Nginx的Gzip压缩简单配置

ngxhttpgzip_module模块 主要负责Gzip功能的开启和设置,对相应数据进行实时压缩. gzip指令 用于开启Gzip功能 ,默认为off gzip_buffers指令 用于设置Gzip压缩文件使用缓存空间的大小 number指...

期待l
2018/08/07
0
0
小蚂蚁学习Linux(6)——压缩与解压缩命令详解

在Linux中常用的压缩格式有以下几个:.zip .gz .bz2 .tar.gz tar.bz2。首先先解释前三个。 .zip格式的压缩: zip 压缩文件名 原文件名 如:zip abc.zip abc 后缀名是一定要写的,虽然Linux不...

嗜学如命的小蚂蚁
2015/11/01
167
0
开启Nginx的gzip压缩功能

默认情况下,Nginx的gzip压缩是关闭的 同时,Nginx默认只对text/html进行压缩 所以,开启gzip的指令如下: gzip on; gziphttpversion 1.0; gzipdisable "MSIE [1-6]."; gziptypes text/plai......

kisshua
2012/06/09
256
0
Nginx Gzip模块启用和配置指令详解

参考一 http://www.111cn.net/sys/nginx/69492.htm 参考二 查找nginx安装的路径以及相关安装操作命令 参考三 http://blog.csdn.net/u011078940/article/details/51276765 Nginx的gzip模块是内...

james_laughing
2016/12/23
33
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 浙江台的电话号码倒是记得挺牢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Out On The Streets》 一直不理解北欧人对重金属和死亡摇滚的热情,听完这首歌好像理解了。#今日歌曲推荐# 《Out On The Stre...

小小编辑
今天
6
0
Leetcode PHP题解--D121 21. Merge Two Sorted Lists

D121 21. Merge Two Sorted Lists 题目链接 21. Merge Two Sorted Lists 题目分析 合并两个有序链表。 思路 逐个遍历两个链表,把小的数字塞入数组里。之后再拼起来。 最终代码 <?php/** *...

skys215
今天
5
0
mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
今天
14
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
今天
9
0
两款软件

fadetop保护眼睛软件 Snipaste截图软件

伟大源于勇敢的开始
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部