2012-09-11 13 views
6

Tengo aquí un archivo JavaScript bastante grande que quiero insertar en mi sitio web. El servidor HTTP es lo suficientemente inteligente como para GZIP el archivo antes de entregarlo al navegador.¿Por qué Safari no acepta la compresión GZIP?

Sin embargo, probé con Google Chrome y Safari.

En Chrome, funciona muy bien. 400K bajar comprimido a alrededor de 100 k:

first

second

PERO en la compresión Safari no funciona:

third

fourth

El ª divertida es decir, en gz2b.png puede ver claramente que la codificación de contenido está configurada en "gzip".


Nota: ya leído en un GZIP-Bug en Safari donde los archivos no pueden terminar en ".gz" o Safari no aceptarán GZIP. Como mi archivo no termina en .gz, este problema no debería ser un problema.

+0

Los encabezados de solicitud que obtienes en safari dicen que el contenido está en GZIP y su longitud es de 119406 bytes. ¿Estás seguro de que la herramienta que estás usando te está diciendo la verdad? – nos

+0

@nos Es la misma herramienta. Solo estoy usando el inspector web que está incorporado en ambos buscadores. – Timo

+0

@nos Tenías razón. Wireshark muestra claramente que el archivo es mucho más pequeño que el tamaño original. Si desea publicar su comentario como respuesta, gustosamente lo marcaré como "la respuesta correcta". – Timo

Respuesta

7

Las cabeceras HTTP enviadas a Safari dicen que es comprimido (Tiene el Content-Encoding: cabecera gzip, y se dice que el Content-Length es 119406 bytes) - Me confiar en aquellos más que el número en negrita diciendo 430,61 en Web Inspector. Cómo determina ambos números en la columna superior, no lo sé.

Puede obtener la verificación de la cantidad de bytes que pasa por el cable si huele la solicitud HTTP con wireshark.

9

Me he encontrado con este problema también, al tratar de optimizar el tiempo de carga de un sitio web en el iPad móvil iOS7 Safari.

  • codificado = tamaño del archivo sin comprimir, desde el servidor
  • Descifrado = tamaño del archivo sin comprimir, localmente
  • transferidos = tamaño + cabeceras de archivo sin comprimir enviados y recibidos
  • Content-Length = archivo enviado comprimido, desde el servidor

Safari eligió una forma realmente extraña de representar estos números en su depurador.

1

Esto es hace un tiempo pero me encontré con un problema muy similar o tal vez el origen de este problema. Al comprimir los datos con gzip para Safari como esto:

gzip jquery.min.js 

que va a terminar con un jquery.min.js.gz la que se producirá un error en Safari, incluso cuando se especifica correctamente como gzip codificado secuencia de archivo y también cuando renombrado a jquery.jgz como se menciona en muchos otros temas sobre este tema. Esto parece ser porque el nombre del archivo está codificado en el archivo gzip.

Si codifica un archivo gzip como esto:

cat jquery.min.js | gzip > jquery.jgz 

, entonces tendrá un archivo que está a unos pocos bytes más pequeña y que funciona sin problemas con Safari.

Cuestiones relacionadas