我正在尝试激活 gzip 压缩,并且已设置选项 gzip_vary on; 以包含 Vary:Accept-Encoding 标头。
问题是,我的应用程序已经设置了 Vary: 标头。因此响应现在有两个 Vary: 标头,一个来自我的应用程序,一个来自 nginx。
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 17 Dec 2016 13:28:38 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Sat, 17 Dec 2016 13:28:38 GMT
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Vary: User-Agent
Content-Encoding: gzip
但我想它应该是这样的:
Vary: Accept-Encoding, User Agent
我怎样才能实现这个目标?
答案1
RFC2616规定重复的标头是可以接受的,并且应该与带有逗号分隔的值列表的单个标头一样处理:
当且仅当该标头字段的整个字段值定义为逗号分隔列表 [即 #(values)] 时,消息中才可以存在具有相同字段名称的多个消息标头字段。必须能够将多个标头字段组合成一个“字段名称:字段值”对,而无需更改消息的语义,方法是将每个后续字段值附加到第一个字段值,每个字段值都用逗号分隔。因此,接收具有相同字段名称的标头字段的顺序对于组合字段值的解释非常重要,因此代理在转发消息时不得更改这些字段值的顺序。
因此,您不需要做任何事情来获得正确的行为。
答案2
您可以按照这种方式使用 gzip。
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js image/gif image/jpeg application/atom+xml application/rss+xml text/x-component image/png image/tiff image/vnd.wap.wbmp image/x-icon image/x-jng image/x-ms-bmp image/svg+xml image/webp application/font-woff application/msword application/pdf;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
查看此链接了解更多信息压缩 uwsgi-nginx 和 nginx 负载均衡器之间的流量