10

我需要使用 gzip 或 deflate 预压缩一些非常大的 html/xml/json 文件(大数据转储)。我从不想提供未压缩的文件。它们是如此之大且重复,以至于压缩可能会很好地工作,虽然一些较旧的浏览器不支持解压缩,但我的典型客户不会使用它们(尽管如果我能生成某种“嘿,你需要升级浏览器的消息)

我自动生成文件,我可以轻松地生成 .htaccess 文件以配合每种文件类型。基本上我想要的是一些总是在mod_gunzip的版本。因为文件很大,而且我会重复为它们提供服务,所以我需要一种方法,可以让我在命令行上压缩一次,非常好。

我在这个网站上找到了一些关于如何使用 gzip 执行此操作的信息,但我想知道是否有人可以指导我如何使用 deflate 执行此操作。完整答案的加分点包括我的 .htaccess 文件应该是什么样子,以及我应该使用 (GNU/Linux) 来获得最佳压缩的命令行代码。答案的超级奖励积分还解决了如何向不兼容的浏览器发送“抱歉没有文件”消息。

如果我们可以创建一个“预压缩”标签来涵盖这样的问题,那就太好了。

-FT

4

4 回答 4

8

编辑:在 mod_mime 中找到AddEncoding

这有效:

<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可以压缩和缓存(压缩的)文件。

于 2010-06-20T07:32:06.650 回答
3

如果我是你,我会考虑内置文件系统压缩,而不是在 apache 层这样做。

在 solaris zfs 具有透明压缩,使用 zfs compress 仅压缩文件系统。类似地,windows 可以压缩文件夹,apache 将提供内容,而不会注意到它是在磁盘上压缩的。Linux 也有执行透明压缩的文件系统。

于 2010-06-22T16:48:51.847 回答
2

对于命令行,编译zlib的zpipe:http ://www.zlib.net/zpipe.c然后

zpipe < BIGfile.html > BIGfile.htmlz

例如。

然后使用 Zash 的示例,设置一个过滤器来更改标题。这应该为您提供现代浏览器可能支持的 RAW deflate 文件。

对于另一种压缩文件的方法,请查看使用pigz和 zlib (-z) 或 PKWare zip (-K) 压缩选项。测试这些工作是否通过 Content-Encoding 集实现。

于 2010-06-21T18:56:49.363 回答
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 */
于 2010-06-16T12:14:13.173 回答