valores type htaccess español contenttype content charset agregar adddefaultcharset .htaccess google-chrome svg apache2

.htaccess - type - ¿Cómo enviar SVG comprimido(desinflado) a través de Apache2?



text html charset iso 8859 1 (5)

He especificado los siguientes atributos en el archivo .htaccess mi sitio:

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

Sin embargo, mi activo SVG no se envía comprimido:

$ 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

asset.svg que este activo ( asset.svg ) se está enviando con una image/svg+xml tipo MIME image/svg+xml usando Chrome, pero con las herramientas de desarrollador web, este archivo específico no se comprime cuando se envía al cliente.

Agregar otros tipos MIME al archivo .htaccess es exitoso (por ejemplo, agregar text/html comprime los activos HTML).

Esto parece específico de cómo se manejan los datos SVG. ¿Qué más puedo probar o solucionar para que funcione la compresión SVG?


En alguna inspección en error.log de mi httpd Apache, parece que no deberíamos especificar DeflateCompressionLevel aquí ...

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

... Así que AddOutputFilterByType DEFLATE image/svg+xml el nivel de compresión y puse solo AddOutputFilterByType DEFLATE image/svg+xml , lo que hace que funcione correctamente.

Salidas de muestra ...

con desinflar ...

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�

y sin deflate ..

don@don-NE56R:/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>


Intenta agregar el tipo también. Algunas configuraciones parecen necesitarlo por varias razones. .svg funciona bien para mí usando la AddOutputFilterByType DEFLATE image/svg+xml . Intenta también agregar el tipo de mimo.

AddType image/svg+xml svg


Si Apache no conoce el tipo de letra mime del archivo (aquí imagen / svg + xml), debe indicarlo específicamente (no es necesario en la mayoría de los Apaches):

AddType image/svg+xml svg svgz

Ahora, cuando Apache sepa sobre el tipo de archivo, simplemente agréguelo para desinflarlo:

AddOutputFilterByType DEFLATE image/svg+xml

Para obtener más información, consulte https://httpd.apache.org/docs/2.4/mod/mod_deflate.html


Sospecho que esto se debe al signo más en el tipo MIME, que puede necesitar escaparse en la directiva AddOutputFilterByType. También puede intentar usar la directiva AddOutputFilter para procesar todos los archivos con una extensión determinada:

AddOutputFilter DEFLATE svg


La mejor opción que encontré es comprimir todo, excepto las imágenes, que mod_deflate no puede manejar.

agregue las siguientes líneas al archivo 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

Si desea ver el registro de lo que se comprimió, agregue lo siguiente también:

DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio LogFormat ''"%r" %{outstream}n/%{instream}n (%{ratio}n%%)'' deflate CustomLog logs/deflate_log deflate