2009-08-09 24 views
8

Es posible que sepa que los formatos de archivo HTML se comprimen con la compresión GZip, en el lado del servidor (en mod_gzip en los servidores Apache) y que los descomprimen los navegadores compatibles. ("codificación de contenido")¿Cómo funciona el lado del servidor GZipping?

¿Esto solo funciona para archivos HTML/XML? Digamos que mi archivo PHP/Perl genera algunos datos simples delimitados por comas, y los envía al navegador, ¿estará codificado de manera predeterminada?

¿Qué pasa con plataformas como Silverlight o Flash, cuando descarguen tal información será comprimido/descomprimido automáticamente por el navegador/tiempo de ejecución? ¿Hay alguna manera de probar esto?

Respuesta

9

¿Esto solo funciona para archivos HTML/XML ?

No: es muy a menudo se utiliza para archivos CSS y JS, por ejemplo - como los que se encuentran entre lo más grande que los sitios web están hechas de (excepto las imágenes), a causa de los marcos JS y aplicaciones completas-JS, ¡representa una gran ganancia!

En realidad, cualquier formato basado en texto se puede comprimir bastante bien (por el contrario, las imágenes no pueden, por ejemplo, ya que generalmente ya están comprimidas); A veces, los datos JSON regresaron de Ajax-solicitudes se comprimen también - es datos de texto, después de todo ;-)

permite decir mi archivo en PHP/Perl genera datos de algunos simples delimitados por comas, y envía al navegador que , ¿estará codificado por defecto ?

Es una cuestión de configuración: si ha configurado el servidor para comprimir ese tipo de contenido, es probable que va a ser comprimido :-)
(Si el navegador dice que acepta datos codificado con Gzip)


he aquí una muestra de la configuración de Apache 2 (usando mod_deflate) que yo uso en mi blog:

<IfModule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/xml 
</IfModule> 

Aquí, quiero hTML/XML/CSS/JS te ser comprimido.

Y aquí es lo mismo, más/menos un par de opciones de configuración que utiliza una vez, bajo Apache (1): mod_gzip

<IfModule mod_gzip.c> 
    mod_gzip_on     Yes 
    mod_gzip_can_negotiate  Yes 

    mod_gzip_minimum_file_size 256 
    mod_gzip_maximum_file_size 500000 

    mod_gzip_dechunk    Yes 

    mod_gzip_item_include   file  \.css$ 
    mod_gzip_item_include   file  \.html$ 
    mod_gzip_item_include   file  \.txt$ 
    mod_gzip_item_include   file  \.js$ 
    mod_gzip_item_include   mime  text/html 

    mod_gzip_item_exclude   mime  ^image/ 
</IfModule> 

cosas que se pueden notar aquí que no quiero demasiado pequeño (la ganancia no sería muy importante) o demasiado grande (podría consumir demasiada CPU para comprimir) los archivos que se van a comprimir; y quiero que se compriman los archivos css/html/txt/js, pero no las imágenes.


Si desea que los datos separados por comas para ser comprimido de la misma manera, tendrá que añadir ya sea que es de tipo de contenido o su extensión a la configuración de su servidor web, para activar gzip-compresión para él.

¿Hay alguna manera de probar esto?

Para cualquier contenido devuelto directamente en el navegador, las extensiones de Firefox Firebug o LiveHTTPHeaders son un must-have.

Para contenido que no pasa por la forma de comunicación estándar del navegador, puede ser más difícil; al final, es posible que tengas que usar algo como Wireshark para "olfatear" lo que realmente está pasando por las tuberías ... ¡Buena suerte con eso!

¿Qué hay de plataformas como Silverlight o Flash, cuando descargan dichos datos que se comprime/descomprime por el navegador/tiempo de ejecución de forma automática?

Para responder a su pregunta sobre Silverlight y Flash, si envían un encabezado Aceptar que indique que admiten el contenido comprimido, Apache usará mod_deflate o mod_gzip. Si no son compatibles con la compresión, no enviarán el encabezado. Simplemente "funcionará". - Nate

+6

sólo para aclarar los futuros lectores: Cualquier tipo de HTTP los datos pueden ser comprimidos, punto Es solo una mala idea para los datos que ya están comprimidos, como las imágenes. –

+0

@Sean> exactamente; Me pregunto si uno podría obtener algo al volver a comprimir las imágenes, por cierto ... Nunca se atrevió a probarlo ^^ (Supongo que la ganancia sería realmente minimalista, si no nula, y consumiría bastante CPU por casi nada ...) –

+0

Bueno, he visto imágenes BPM sin comprimir servidas ... –

5

Creo que mod_deflate de Apache es más común que mod_gzip, porque está incorporado y hace lo mismo. Consulte la documentación para mod_deflate (vinculada anteriormente) y verá que es fácil especificar qué tipos de archivos comprimir, en función de sus tipos MIME. Por lo general, vale la pena comprimir HTML, CSS, XML y JavaScript. Las imágenes ya están comprimidas, por lo que no se benefician de la compresión.

4

El navegador envía un encabezado "Accept-Encoding" con los tipos de compresión que sabe cómo entender. El servidor mira esto, junto con el agente de usuario y decide cómo codificar el resultado. Algunos buscadores mienten sobre lo que pueden entender, por lo que esto es más complejo que simplemente buscar "desinflar" en el encabezado.

Técnicamente, cualquier respuesta HTTP/2xx con contenido puede codificarse en contenido usando cualquiera de las codificaciones de contenido válidas (gzip, zlib, desinflar, etc.), pero en la práctica es un desperdicio aplicar compresión a tipos de imágenes comunes porque en realidad los hace más grandes.

Definitivamente puede comprimir la respuesta de las páginas dinámicas de PHP. El método más simple es agregar:

<?php ob_start("ob_gzhandler"); ?> 

al inicio de cada página PHP. Es mejor configurarlo a través de la configuración de PHP, por supuesto.

Hay muchas páginas de prueba, se encuentran fácilmente con Google:

Cuestiones relacionadas