我想将我的网络服务器的所有静态文件保存在本地压缩,并根据请求为它们提供压缩或不压缩。
如何在 Apache 2.x 中使用 mod_deflate 预压缩文件?foo.tar.gz
, 很接近,因为确实通过启用 MultiViews 并使用正确的 AddEncoding,我可以让 Apache在我请求时从我的网络服务器返回压缩文件foo.tar
,并且它带有正确的Content-Encoding:
标题。
但这仅在客户端包含Accept-Encoding: gzip
在它发送到服务器的标头中时才有效。OTOH,如果客户端不支持 gzip 编码,我的服务器只会告诉我foo.tar
对我来说没有“可接受的”。
如果我使用AddOutputFilter INFLATE tar
. 但是如果我这样做,那么服务器也会在我请求时foo.tar.gz
(或者当我指定我接受 gzip 编码时)解压缩内容,这显然是我不想要的。
那么,当客户端不支持 gzip 内容编码但在其他情况下提供预压缩文件时,如何让 Apache 解压缩文件?
编辑:根据@covener 的建议,我尝试了以下方法:
AddEncoding x-gzip .gz .tgz
RemoveType application/x-gzip .gz .tgz
AddType application/x-tar .tgz
<Location /packages>
FilterDeclare smgunzip CONTENT_SET
FilterProvider smgunzip INFLATE req=Accept-Encoding !$gzip
FilterChain smgunzip
</Location>
[ 在这里使用 Apache-2.2.22。] 但结果实际上比仅使用前三行更糟糕:当我请求 .tar.gz 文件时,它现在返回时没有“Content-Encoding:”,当我请求 .tar 文件时,我收到tar.gz 的内容(即仍然压缩),无论“Accept-Encoding:”标头如何,并且仍然没有“Content-Encoding:”。