我需要使用gzip或deflate预压缩一些非常大的html / xml / json文件(大型数据转储)。我从不想要提供未压缩的文件。它们是如此庞大和重复,压缩可能会非常好,虽然一些旧的浏览器不能支持解压缩,我的典型客户将不会使用它们(虽然如果我能产生某种'嘿你需要升级浏览器的消息
我自动生成文件,我可以轻松生成.htaccess文件以与每种文件类型一起使用。基本上我想要的是mod_gunzip的一些版本。因为文件很大,并且因为我将重复提供它们,所以我需要一种方法,允许我在命令行上压缩一次,非常好。
我在本网站上找到了一些关于如何使用gzip进行此操作的信息,但我想知道是否有人可以指导我如何使用deflate执行此操作。奖励指向一个完整的答案,包括我的.htaccess文件应该是什么样子,以及我应该使用的命令行代码(GNU / Linux)来获得最佳压缩。答案的超级奖励积分还解决了如何向不兼容的浏览器发送“抱歉没有文件”消息。
如果我们可以创建一个“预压缩”标签来覆盖这样的问题,那么会很可爱。
-FT
答案 0 :(得分:8)
这有效:
<IfModule mod_mime.c>
<Files "*.html.gz">
ForceType text/html
</Files>
<Files "*.xml.gz">
ForceType application/xml
</Files>
<Files "*.js.gz">
ForceType application/javascript
</Files>
<Files "*.gz">
AddEncoding gzip .gz
</Files>
</IfModule>
文档听起来似乎只需要AddEncoding
,但我没有让它发挥作用。
此外,Lighttpd的mod_compression可以压缩和缓存(压缩的)文件。
答案 1 :(得分:3)
如果我是你,我会查看内置的文件系统压缩,而不是在apache层执行此操作。
在solaris zfs上有透明压缩,使用zfs compress来压缩文件系统。 同样,Windows可以压缩文件夹,apache将服务于内容,而不知道它在磁盘上压缩的事实。 Linux的文件系统也进行透明压缩。
答案 2 :(得分:2)
对于命令行,编译zlib的zpipe:http://www.zlib.net/zpipe.c然后
zpipe < BIGfile.html > BIGfile.htmlz
例如。
然后使用Zash的示例,设置一个过滤器来更改标题。这应该为您提供RAW deflate文件,现代浏览器probably support。
有关压缩文件的另一种方法,请查看使用pigz和zlib(-z)或PKWare zip(-K)压缩选项。测试这些工作是否通过Content-Encoding设置完成。
答案 3 :(得分:0)
在不直接处理moz_gzip / mod_defalte的情况下压缩内容的一种快捷方法是使用ob_gzhandler并修改标头(在任何输出发送到浏览器之前)。
<?php
/* Replace CHANGE_ME with the correct mime type of your large file.
i.e: application/json
*/
ob_start ('ob_gzhandler');
header('Content-type: CHANGE_ME; charset: UTF-8');
header('Cache-Control: must-revalidate');
$offset = 60 * 60 * 2 ;
$ExpStr = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT';
header($ExpStr);
/* Stuff to generate your large files here */