1
ryd994 2015-01-27 16:07:22 +08:00 via Android
Content-Encoding: gzip
这不就是压缩过了么!curl自动帮你解了而已 |
2
cruelcage OP @ryd994 我用wget带Accept-Encoding头下下来的是文本格式,不是压缩包,照理说不应该是压缩包吗?我试过其他网站的下下来是压缩包。
|
3
ryd994 2015-01-27 16:25:14 +08:00 via Android
其他网站上的content-type是什么?后缀是什么?
|
4
BOYPT 2015-01-27 16:27:06 +08:00
你程序里面不要输出Content-Encoding: gzip
由nginx来处理。 curl -v --compressed http:/xxxxxx > /dev/null 这样只要你看到有Content-Encoding: gzip,说明就是压缩的。 |
5
cruelcage OP @ryd994 比如https://api.github.com/events返回的是Content-Type: application/json; charset=utf-8
|
6
cruelcage OP @BOYPT 我删掉web.header("Content-Encoding", "gzip")后是输出Content-Encoding: gzip没错,但是wget下来的依然是文本格式而且大小也没有压缩过,size有大于1k。
|
7
cruelcage OP @BOYPT 比如wget --header="Accept-Encoding:gzip" https://api.github.com/events和wget https://api.github.com/events结果一个是文本,一个是压缩包。
|
8
ryd994 2015-01-27 17:05:12 +08:00 via Android
不能啊,按照HTTP协议规范,设置了content-encoding就肯定得有相应的处理啊。
|
9
ryd994 2015-01-27 17:12:46 +08:00 via Android
你用html文件试试看,如果html没问题的话,那就是gzip_types的问题 http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_types
你给个测试链接我看看,记得限制请求频率免得被人DOS了 |
10
ryd994 2015-01-27 17:14:12 +08:00 via Android
等等,你是app里设定的gzip的header?
不需要啊,nginx如果压缩了会自己设置的,不要在app里设 |
11
clino 2015-01-27 17:23:57 +08:00
建议用wireshark抓包诊断比较快
|
14
cruelcage OP @BOYPT 不科学啊,没有压缩效果阿,照理说我加了accept-encodingwget不会解压阿
|
15
ryd994 2015-01-27 18:16:22 +08:00
|
17
ryd994 2015-01-27 19:21:10 +08:00 via Android
你用个本地文件先试试
|
18
cruelcage OP @ryd994 我用curl -H "Accept-Encoding:gzip"得到的是gzip格式的了,然后再gunzip后正常,看来是wget自动解压缩了,坑爹,我要仔细研究下wget。感谢相助。
|
20
zhicheng 2015-01-27 21:00:17 +08:00
@ryd994 你需要再仔细的读一遍 RFC 了。
gzip 并不是强制的,如果 client 不设置可以接收 gzip ,那么正常的 server 是不会发送 gzip 编码过的 body ,这是内容协商的一部分。 |
23
zhicheng 2015-01-28 00:46:53 +08:00
@ryd994 要不怎么叫内容协商呢?
服务器端有,但是客户端没有发送支持 gzip 的 Accept-encoding ,服务器是不会压缩的。当然可以让服务器强制 gzip 压缩,只是默认服务器不会这样,违反 RFC 。 另外那个 Content-Encoding 的头,是自己设置的。不是 Nginx 设置的。。。。 |
24
cruelcage OP @zhicheng @ryd994 最终结果是这样
有自己设置的web.header("Content-Encoding", "gzip")后curl -I输出 HTTP/1.1 200 OK Server: nginx Date: Wed, 28 Jan 2015 01:13:13 GMT Content-Type: application/json Connection: keep-alive Content-Encoding: gzip wget --header="accept-encoidng:gzip"返回文本格式 ------------------------------------------------------------------------------------------------------------------------ 去掉自己设置的web.header("Content-Encoding", "gzip")后curl -I输出: HTTP/1.1 200 OK Server: nginx Date: Wed, 28 Jan 2015 01:08:13 GMT Content-Type: application/json Connection: keep-alive Vary: Accept-Encoding wget --header="accept-encoidng:gzip"返回gzip格式 |
25
sampeng 2015-01-28 13:58:19 +08:00
gzip_min_length 1k;
1k=1024个字节。你得json多大到1k啊。。 补充一下,1k你就压缩,效率和压缩比反而低。 json不需要gzip。除非上百k的。其他反而增加负担 |
26
wuljy 2015-01-29 12:04:06 +08:00
1. 自己不要随意加头
2. 小文件不要随意zip 3. 大文件不要用json |