Servir documentos comprimidos con Apache

Los buenos usos de experiencia web, recomiendan entregar desde el servidor (al menos) los documentos estáticos comprimidos al navegador del usuario, siempre que el navegador pueda descomprimirlo. De esta forma se entrega mucho antes y la página estará lista en el menor tiempo posible.

Hoy en día las aplicaciones Web, hacen un uso extensivo de frameworks javascript y extensas hojas de estilos CSS.
Podemos configurar el servidor Apache 2.2 para que entregue los documentos de cierto tipo comprimidos con DEFLATE a los navegadres que en sus cabeceras de solicitud acepten la compresión:

Accept-Encoding: gzip,deflate

Al cual se le puede entregar un documento con, por ejemplo, las cabeceras:

Content-Encoding: gzip
Content-Type: application/javascript

Esto se consigue mediante la configuración de directivas en Apache:En el fichero httpd.conf, nos aseguramos de que la linea

LoadModule deflate_module modules/mod_deflate.so

se halla descomentada (sin # al principio).

A partir de aqui tenemos la opción de activarlo Globalmente en una directiva Directory o bien incluyendo un fichero .htaccess en un directorio concreto.

  • Globalmente, en el fichero httpd.conf hallamos una directiva Directory e introducimos un filtro de salida Deflate para tantos tipos MIME como queramos.
<Directory "/usr/local/apache/share/htdocs">
...
	<IfModule deflate_module>
		AddOutputFilterByType DEFLATE text/html application/xhtml+xml
		AddOutputFilterByType DEFLATE text/css
		AddOutputFilterByType DEFLATE application/javascript application/x-javascript text/javascript
		AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-php-source application/x-httpd-fastphp
		AddOutputFilterByType DEFLATE text/plain
		AddOutputFilterByType DEFLATE text/xml application/xml application/xslt+xml application/xml-dtd
		AddOutputFilterByType DEFLATE image/svg+xml
		AddOutputFilterByType DEFLATE image/bmp
		AddOutputFilterByType DEFLATE application/rss+xml application/atom_xml
		AddOutputFilterByType DEFLATE application/x-httpd-eruby
	</IfModule>
</Directory>

Puede que obtengas un “500 Internal Server Error” si apache no tiene los tipos MIME configurados, para lo que podemos utilizar las extensiones de archivo.

<IfModule deflate_module>
  <FilesMatch "\.(php|phps|js|css|html|htm|txt|xml|xsl|json)$">
    SetOutputFilter DEFLATE
  </FilesMatch>
</IfModule>
  • En un fichero .htaccess en un directorio concreto.
    Primero debemos asegurarnos que en el fichero httpd.conf, la directiva de directorio AllowOverride admita FileInfo, de lo contrario no podremos utilizar un .htccess para servir el archivo comprmido.

<Directory "/usr/local/apache/share/htdocs">
...

# AllowOverride None
# AllowOverride All
AllowOverride None
</Directory>

Después simplemente debemos introducir un archivo de texto .htaccess en el subdirectorio con los contenidos que queremos servir contenidos. Con los filtros (notese que no hace falta la directiva Directory)

<IfModule deflate_module>
	AddOutputFilterByType DEFLATE text/html application/xhtml+xml
	AddOutputFilterByType DEFLATE text/css
	AddOutputFilterByType DEFLATE application/javascript application/x-javascript text/javascript
	AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-php-source application/x-httpd-fastphp
	AddOutputFilterByType DEFLATE text/plain
	AddOutputFilterByType DEFLATE text/xml application/xml application/xslt+xml application/xml-dtd
	AddOutputFilterByType DEFLATE image/svg+xml
	AddOutputFilterByType DEFLATE image/bmp
	AddOutputFilterByType DEFLATE application/rss+xml application/atom_xml
	AddOutputFilterByType DEFLATE application/x-httpd-eruby
</IfModule>
Anuncios
    • phisys
    • 17/04/09

    EDIT: Añadido el método de FilesMatch para quien no tenga los tipos MIME configurados.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: