如何通过Apache2发送压缩(放气)的SVG?

时间:2014-01-25 22:01:55

标签: .htaccess google-chrome svg apache2

我在网站的.htaccess文件中指定了以下属性:

AddOutputFilterByType DEFLATE image/svg+xml
DeflateCompressionLevel 9
Header append Vary Accept-Encoding

但是,我的SVG资产不是以压缩形式发送的:

$ curl https://example.org/assets/svg/asset.svg --silent -H "Accept-Encoding: gzip,deflate" --write-out "${size_download}\n" --output /dev/null                 
152655                                                                                                                                                                                                                                  
$ curl https://example.org/assets/svg/asset.svg --silent --write-out "%{size_download}\n" --output /dev/null
152655

我使用Chrome验证了此资产(asset.svg)是使用MIME类型image/svg+xml发送的,但是使用Web Developer工具时,此特定文件在发送到客户端时不会被压缩。 / p>

将其他MIME类型添加到.htaccess文件是成功的(例如,添加text/html会压缩HTML资源)。

这似乎特定于如何处理SVG数据。我还可以尝试或排除故障以使SVG压缩工作吗?

5 个答案:

答案 0 :(得分:72)

如果Apache不知道文件的mime类型(这里是image / svg + xml),你需要具体告诉它(在大多数Apaches中不需要):

AddType image/svg+xml svg svgz

现在当Apache知道文件类型时,只需添加它来放气:

AddOutputFilterByType DEFLATE image/svg+xml

有关详细信息,请参阅https://httpd.apache.org/docs/2.4/mod/mod_deflate.html

答案 1 :(得分:3)

我怀疑这是由于MIME类型中的加号,可能需要在AddOutputFilterByType指令中转义。您也可以尝试使用AddOutputFilter指令来处理具有特定扩展名的所有文件:

AddOutputFilter DEFLATE svg

答案 2 :(得分:2)

我找到的最佳选择是压缩除图像之外的所有内容,mod_deflate无法处理它。

将以下行添加到httpd.conf文件中:

LoadModule deflate_module modules/mod_deflate.so

SetOutputFilter DEFLATE

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4\.0[678] no-gzip

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

SetEnvIfNoCase Request_URI \

\.(?:gif|jpe?g|png|exe)$ no-gzip dont-vary

如果您想查看已压缩内容的日志记录,请添加以下内容:

DeflateFilterNote Input instream

DeflateFilterNote Output outstream

DeflateFilterNote Ratio ratio

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate

CustomLog logs/deflate_log deflate

答案 3 :(得分:1)

尝试添加类型。由于各种原因,某些配置似乎需要它。 .svg使用AddOutputFilterByType DEFLATE image/svg+xml对我很好。 尝试添加mime类型。

AddType image/svg+xml svg

答案 4 :(得分:0)

在我的apache error.log的{​​{1}}进行一些检查时,看起来我们不应在此指定httpd ...

DeflateCompressionLevel

...所以我已经删除了压缩级别,只放了 [Mon Feb 03 23:56:52 2014] [alert] [client 127.0.0.1] /var/www/.htaccess:DeflateCompressionLevel not allowed here ,它使其正常工作。

示例输出......

与deflate ...

AddOutputFilterByType DEFLATE image/svg+xml

没有放气..

don@don-NE56R:/var/www$ curl http://mydaddy.com:81/circle.svg -H "Accept-Encoding: gzip,deflate" --write-out "${size_download}\n"
ݶٮ;��uCL*j��z�9.�����#�_]#���̊Ve��p��$�y�D���h��þ ��|�XeP��R�