请教 Nginx 中对 application/json 格式进行 gzip 压缩无效的问题?

2015-01-27 13:40:42 +08:00
 cruelcage
nginx.conf

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/json;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;


我用的是web.py框架
web.header("Content-Type", "application/json")
web.header("Content-Encoding", "gzip")


curl -I返回的是

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 27 Jan 2015 05:32:34 GMT
Content-Type: application/json
Connection: keep-alive
Content-Encoding: gzip
Set-Cookie: webpy_session_id=0b019c20c14f05cd3db73afe18ca07902928889d; Path=/; httponly

wget --header="accept-encoding:gzip"之后得到的格式不是压缩格式

请问是哪里出了问题,找半天还是没找到。
14859 次点击
所在节点    NGINX
26 条回复
ryd994
2015-01-28 00:19:02 +08:00
@zhicheng 问题是现在服务器有content-encoding这个header,却没有压缩
ryd994
2015-01-28 00:34:44 +08:00
@zhicheng 事实证明楼主自己二了,不知道wget会自动解码
zhicheng
2015-01-28 00:46:53 +08:00
@ryd994 要不怎么叫内容协商呢?
服务器端有,但是客户端没有发送支持 gzip 的 Accept-encoding ,服务器是不会压缩的。当然可以让服务器强制 gzip 压缩,只是默认服务器不会这样,违反 RFC 。
另外那个 Content-Encoding 的头,是自己设置的。不是 Nginx 设置的。。。。
cruelcage
2015-01-28 09:10:21 +08:00
@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格式
sampeng
2015-01-28 13:58:19 +08:00
gzip_min_length 1k;

1k=1024个字节。你得json多大到1k啊。。

补充一下,1k你就压缩,效率和压缩比反而低。

json不需要gzip。除非上百k的。其他反而增加负担
wuljy
2015-01-29 12:04:06 +08:00
1. 自己不要随意加头
2. 小文件不要随意zip
3. 大文件不要用json

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/165828

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX