Apache2 / Nginx 啟用壓縮(gzip) 於 IE6 的問題說明

标签: My_Note gzip ie | 发表时间:2011-12-13 01:25 | 作者:Tsung
出处:http://blog.longwin.com.tw

網站只要能啟用 gzip 壓縮, 都能節省非常多的流量, 下述幾種與對應壓縮方式名稱對應:

  • apache1.x: mod_gzip
  • apache2.x: deflate (啟用方式: a2enmod deflate)
  • nginx: gzip

只是壓縮啟用後, 在 IE6 會有一些問題, 有時候會出現空白頁 / JS 沒載入完.. 等等異常現象.

先講結論:

  1. IE6 (含 IE6 以前的版本)不支援 "Transfer-Encoding: chunked", 所以會有問題.
  2. 解法就是, IE6 以前的不使用 gzip 壓縮, 或者找已經有解決此問題的 Web server 來用

Apache2 / Nginx 啟用壓縮(gzip) 於 IE6 的問題說明

IE6 以前會發生異常現象, 主要的原因下述此篇文章有解釋: IE6 不支持 HTTP 協議的動態壓縮 Chunked 方式, 下述摘錄自此篇:

通常, HTTP 協議中 使用 Content-Length 這個 HEADER 來告知數據的長度. 然後, 在數據下載的過程中, Content-Length 的方式要預先在 Web Server 中暫存所有資料, 然後所有資料再一起發給客戶端.

如果要一邊產生資料, 一邊發給客戶端, WEB Server 就需要使用 "Transfer-Encoding: chunked" 這樣的方式來代替 Content-Length.

HTTP 溝通格式如下:

HTTP HEADER\r\n\r\n
16進制(資料長度)\r\n
上面所指的資料長度內容...\r\n
16進制代表的第二段資料\r\n
XX 長度的資料...\r\n
... 反覆這樣子傳輸.
0\r\n\r\n(0 代表資料結束, 在加上兩次換行)

發生異常現象的原因, 就是在於 IE6 不支持 chunked 方式(Transfer-Encoding: chunked)的動態壓縮, 所以只能放棄對 IE6 的壓縮.

取消 IE6 的壓縮設定

Nginx 的設定如下:

gzip_disable "MSIE [1-6]\.(?!.*SV1)";

Apache2 "/etc/apache2/mods-available/deflate.conf" 裡面本身有寫到下述:

# these are known to be safe with MSIE 6
AddOutputFilterByType DEFLATE text/html text/plain text/xml

# everything else may cause problems with MSIE 6
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
AddOutputFilterByType DEFLATE application/rss+xml

就自己決定要怎麼做囉~

不支援 chunked 的解法

Yahoo! 有把這個問題解決掉(有些 CDN 有把這個問題解決掉), 使用有解決掉這些問題的 Server 來吐資料的話, Gzip 就可以安心開啟使用.

Yahoo! 的解法在此篇有解說 並有 PHP code 的測試範例: HTTP chunked + gzip 及 瀏覽器間容測試

相关 [apache2 nginx gzip] 推荐:

Apache2 / Nginx 啟用壓縮(gzip) 於 IE6 的問題說明

- - Tsung's Blog
網站只要能啟用 gzip 壓縮, 都能節省非常多的流量, 下述幾種與對應壓縮方式名稱對應:. apache2.x: deflate (啟用方式: a2enmod deflate). 只是壓縮啟用後, 在 IE6 會有一些問題, 有時候會出現空白頁 / JS 沒載入完. IE6 (含 IE6 以前的版本)不支援 "Transfer-Encoding: chunked", 所以會有問題..

Nginx GZip 压缩

- - 开心平淡对待每一天。热爱生活
  Nginx GZip 模块文档详见: http://wiki.nginx.org/HttpGzipModule 常用配置片段如下:. # 压缩比例,比例越大,压缩时间越长. 默认是1 gzip_types. text/css text/javascript; # 哪些文件可以被压缩 gzip_disable.

增加Apache2和Nginx的header长度限制

- - haohtml's blog
nginx默认的header长度上限是4k,如果超过了这个值. nginx会直接返回400错误. 可以通过以下2个参数来调整header上限. 看起来是,nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取.

[原]Android HttpURLConnection Accept-Encoding: gzip 版本问题

- - bob007abc的专栏
Android 官方文档对 HttpURLConnection 的 Performance 的描述有一段:. 参见: http://developer.android.com/reference/java/net/HttpURLConnection.html. 就是说 使用HttpURLConnection发请求时,默认的request hearder里会加上 Accept-Encoding: gzip.

tomcat如何使用Gzip对静态文件压缩

- - 开源软件 - ITeye博客
tomcat7配置gzip没有效果 http://www.oschina.net/question/142859_70497. tomcat7里面js的mime类型改了,新版的是: web.xml. Tomcat配置改为: server.xml . Tomcat 采用的是 HTTP/1.1 的 GZIP 压缩协议,它会根据浏览器送过来的请求中的 accept-encoding 值是否包含 gzip 来判断浏览器是否支持 gzip 压缩协议,如果浏览器支持就启用 gzip 压缩,否则就不进行任何压缩处理.

nginx配置ssl

- - 邢红瑞的blog
先生成网关证书 ,仿照CA模式.

Nginx安装

- - 企业架构 - ITeye博客
nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. ububtu平台编译环境可以使用以下指令. centos平台编译环境使用如下指令. 一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩.

Nginx 限流

- - 鸟窝
电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单、信誉分析,进而根据用户ip信誉权重做相应的流量拦截、限制流量. Nginx自身有的请求限制模块 ngx_http_limit_req_module、流量限制模块 ngx_stream_limit_conn_module基于令牌桶算法,可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制.

NGINX的流媒体插件 nginx-rtmp-module

- - 开源软件 - ITeye博客
战斗民族俄罗斯人民开发的一款NGINX的流媒体插件,除了直播发布音视频流之外具备流媒体服务器的常见功能. 基于HTTP的FLV/MP4 VOD点播. HLS (HTTP Live Streaming) M3U8的支持. 基于http的操作(发布、播放、录制). 可以很好的协同现有的流媒体服务器以及播放器一起工作.

Nginx content cache Nginx内容缓存

- - CSDN博客推荐文章
原文地址: http://nginx.com/resources/admin-guide/caching/. When caching is enabled NGINX saves responses in the cache on the disk and uses them to respond to clients without proxying the requests..