.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