【发布时间】:2016-07-12 14:17:16
【问题描述】:
我有一个 PHP 脚本作为我系统的一部分,它将文件组合成 tar.gz、tar.xz 或 zip 文件并将其传递给浏览网站的用户。
tar.xz 和 zip 文件的下载工作完美无缺。 但是有了 tar.gz,我就没那么幸运了。
我使用的是 Apache 2.2.15,启用了 mod_deflate 模块并设置为 gzip 输出。
如果您使用 Accept-Encoding: gzip 发出请求,它会发送 tar.gz 双重压缩(例如 gz(gz(tar(...))) ),据我所知,它是“正确”的方式(即使它是无用的双重压缩)。
我在传递此文件时从 PHP 中设置标题 Content-Type: application/x-gzip。
当我这样做时,似乎 Firefox 在下载时没有反转 gzip 压缩的第二层(Apache 正在应用的层)。
当我将内容类型更改为其他内容时,问题不会发生,并且我得到了正确的 tar.gz 文件。
在这两种情况下,Apache 都添加了另一层压缩并发送 Content-Encoding: gzip 标头。
如何在保留所需的 Content-Type 的同时解决此问题,以便用户可以在正确的程序中实际打开文件?
但我知道这是 XY 问题的一个示例,因为 正确 解决方法是禁用 Apache 的额外压缩。 但是,我不想为我的站点的其余部分禁用压缩。 如何让 PHP 告诉 Apache 不要 gz 压缩该特定输出?
【问题讨论】:
-
您可以为 apache 中的特定内容禁用 gzip。您无需为整个网站禁用它。