it-swarm.com.de

Wie sende ich komprimiertes SVL über Apache2?

Ich habe die folgenden Attribute in der .htaccess-Datei meiner Website angegeben:

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

Mein SVG-Asset wird jedoch nicht in komprimierter Form gesendet:

$ 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

Ich habe bestätigt, dass dieses Asset (asset.svg) mit MIME-Typ image/svg+xml unter Verwendung von Chrome gesendet wird. Mit den Web Developer-Tools wird diese bestimmte Datei jedoch nicht komprimiert, wenn sie an den Client gesendet wird.

Das Hinzufügen anderer MIME-Typen zur .htaccess-Datei ist erfolgreich (z. B. fügt text/html die HTML-Elemente hinzu).

Dies scheint spezifisch für den Umgang mit SVG-Daten zu sein. Was kann ich sonst noch versuchen, um die SVG-Komprimierung zu aktivieren?

34
Alex Reynolds

Wenn Apache den MIME-Typ der Datei nicht kennt (hier image/svg + xml), müssen Sie dies spezifisch angeben (in den meisten Apaches nicht erforderlich):

AddType image/svg+xml svg svgz

Wenn Apache nun über den Dateityp Bescheid weiß, fügen Sie einfach Folgendes hinzu, um ihn zu entleeren:

AddOutputFilterByType DEFLATE image/svg+xml

Weitere Informationen finden Sie unter https://httpd.Apache.org/docs/2.4/mod/mod_deflate.html

68
Reeno

Ich vermute, dass dies auf das Pluszeichen in dem MIME-Typ zurückzuführen ist, das möglicherweise in der AddOutputFilterByType-Direktive umschaltet werden muss. Sie können stattdessen auch die Direktive AddOutputFilter verwenden, um alle Dateien mit einer bestimmten Erweiterung zu verarbeiten:

AddOutputFilter DEFLATE svg
3
rmeakins

Die beste Option, die ich gefunden habe, ist das Komprimieren von allem, außer Bildern, die mod_deflate nicht verarbeiten kann.

fügen Sie der httpd.conf-Datei folgende Zeilen hinzu:

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

Wenn du die Protokollierung der komprimierten Dateien sehen möchtest, füge Folgendes hinzu:

DeflateFilterNote Input instream

DeflateFilterNote Output outstream

DeflateFilterNote Ratio ratio

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

CustomLog logs/deflate_log deflate
2
Fabio Albertoni

Versuchen Sie auch, den Typ hinzuzufügen. Einige Konfigurationen scheinen es aus verschiedenen Gründen zu benötigen. .svg funktioniert für mich mit dem AddOutputFilterByType DEFLATE image/svg+xml. Versuchen Sie auch, den Mime-Typ hinzuzufügen.

AddType image/svg+xml svg
1
Panama Jack

Bei einer Überprüfung in error.log meines Apache httpd sieht es so aus, als sollten wir DeflateCompressionLevel hier nicht angeben.

[Mon Feb 03 23:56:52 2014] [alert] [client 127.0.0.1] /var/www/.htaccess:DeflateCompressionLevel not allowed here

... Also habe ich die Komprimierungsstufe entfernt und nur den AddOutputFilterByType DEFLATE image/svg+xml eingefügt, wodurch es richtig funktioniert. 

Beispielausgaben ...

mit entlüften ...

[email protected]:/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�

und ohne entlüften ..

[email protected]:/var/www$ curl http://mydaddy.com:81/circle.svg  --write-out "${size_download}\n"
<svg height="100" width="100">
  <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
  Sorry, your browser does not support inline SVG.  
</svg>
0
Siva Tumma