在apache htdocs中,我只想有压缩文件(gzip文件)并基于请求接受的编码类型,如果启用了gzip编码,我希望apache提供压缩文件,如果不支持gzip编码,那么我希望 apache 通过解压缩 gzip 文件来提供服务。
我不想保留未压缩的文件并在访问时使用 deflate 进行压缩,因为这效率低下,并且默认情况下所有客户端都支持 gzip 编码。
通过同时拥有压缩文件和未压缩文件(example.js 和 example.jsgz 均位于 htdocs 目录中),我能够通过对请求接受的编码和 RedirectRules 使用 RedirectCond 来完成这项工作。但这需要存储两个文件(压缩文件和普通文件)。以下是我与重定向规则一起使用的配置。
<Directory /var/www/app>
AddEncoding gzip .jsgz .cssgz .htmlgz
AddType text/javascript .jsgz
AddType text/css .cssgz
AddType text/html .htmlgz
SetEnv force-no-vary
Header set Cache-Control "private"
RewriteEngine on
# If client accepts compressed files
RewriteCond %{HTTP:Accept-Encoding} gzip
# and if compressed file exists
RewriteCond %{REQUEST_FILENAME}gz -f
# send .htmlgz instead of .html
RewriteRule ^(.+)\.(html|css|js)$ $1.$2gz [L]
</Directory>
我不想像上面那样做,因为我必须保留每个文件的两个版本。
例如:
htdocs 内应用程序目录的内容
ls app/
example.jsgz
应用程序目录的服务器端 apache 配置
在这种情况下,使用 MultiView 选项,当请求文件是 example.js 时,我能够服务器 example.jsgz,因为 example.js 不存在。我的apache端的配置如下:
<Directory /var/www/htdocs/app>
AddEncoding gzip .jsgz .cssgz .htmlgz
AddType text/javascript .jsgz
AddType text/css .cssgz
AddType text/html .htmlgz
Options +Multiviews
SetEnv force-no-vary
Header set Cache-Control "private"
</Directory>
案例1:
请求 header 表示支持 gzip 编码。请求的 url 是 example.js 而不是 example.jsgz。这是有效的,example.jsgz 文件的内容编码为 gzip,客户端可以解压缩并使用该 js 文件。
Request URL:http://A.B.C.D/app/example.js
Request Method:GET
Request HTTP headers:
Accept-Encoding:gzip,deflate,sdch
Response Headers:
Content-Encoding:gzip
案例2:
请求 header 表示不支持 gzip 编码。请求的 url 是 example.js 而不是 example.jsgz。这不起作用,因为 apache 正在提供 example.jsgz 服务,并且客户端因不支持 gzip 编码而失败。
Request URL:http://A.B.C.D/app/example.js
Request Method:GET
Request HTTP headers:
Response Headers:
Content-Encoding:gzip
当客户端不支持 gzip 编码时,是否有办法通过在 htdocs 中包含压缩文件来处理情况 2?
我读过有关充气和放气选项的内容。还有关于多 View 选项。但是当目录包含压缩格式(gzip 编码)的多种类型的内容(javascript、css、html)时,我没有在目录级别找到示例。
提前致谢
最佳答案
看起来这就是您所需要的 http://www.innerjoin.org/apache-compression/howto.html
虽然我还没有尝试过。
另一种选择可能是使用某种脚本语言来运行解压并响应(php、ruby、perl...)
就性能而言,同时拥有两个版本是最好的选择,因为它不需要任何额外的努力。
关于apache - 如何仅通过压缩文件根据请求接受的编码类型提供压缩/未压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22990157/