最近碰到了一个奇异的问题:apache的服务器,一个Flash调Mp3进行播放,用IE和chromium打开后启动时正常,一旦暂停后,再次播放就无效。但对于Firefox则xx正常。
反复检查代码,无果。将文件上传到另外一台机器后IE也正常。反复修改KeepAlive,disk-cache之类的设置,xx没有效果。
真是叫人郁闷。
检查了apache的配置,感觉问题应该跟mod_deflate模块有关,相应的代码如下:
??? <IfModule deflate_module> ??????? SetOutputFilter DEFLATE ??????? BrowserMatch ^Mozilla/4 gzip-only-text/html ??????? BrowserMatch ^Mozilla/4.0[678] no-gzip ??????? BrowserMatch bMSIE !no-gzip !gzip-only-text/html ??????? SetEnvIfNoCase Request_URI ??????????????? .(?:gif|jpe?g|png)$ no-gzip dont-vary ??? </IfModule>
关闭后IE恢复正常,考虑到一般情况下,mp3和swf压缩不了多少,但是却经常需要断点续传,重新修改相应配置:
??? <IfModule deflate_module> ??????? SetOutputFilter DEFLATE ??????? BrowserMatch ^Mozilla/4 gzip-only-text/html ??????? BrowserMatch ^Mozilla/4.0[678] no-gzip ??????? BrowserMatch bMSIE !no-gzip !gzip-only-text/html ??????? SetEnvIfNoCase Request_URI ??????????????? .(?:gif|jpe?g|mp3|swf|png)$ no-gzip dont-vary ??? </IfModule>
xx正常!
分析下来大致原理如下(个人分析,无依据):
首先假设的是我没有踩中任何一个bug。这个问题似乎跟原先出现过deflate的文件不能断点续传为同一个问题。
mp3采用流格式传输,没有xx下载结束就被暂停下载,由于系统启用了mod_deflat的压缩传输模块,本地保存的实际上是一个gzip过的mp3文件。
由于目前主流浏览器都支持断点续传,而对于断点续传的处理却各有不同,IE和chromium可能会先对于gzip之前的文件进行校验,发觉校验失败,认为这是一个错误的文件,不再进行续传;FF则是先不进行校验,或者校验失败后重新下载续传。
尚为猜测,希望各位朋友给个确凿的解释。