2009-03-18 11 views
9

Estoy tratando de reducir algunas rarezas con mis llamadas AJAX. Mis scripts PHP tienen esto al inicio:¿La codificación gzip es compatible con JSON?

ob_start("ob_gzhandler"); 

Funciona muy bien con HTML. ¿Pero hay algún problema al hacerlo con datos de aplicación/json? ¿Algún problema con el navegador que alguien sepa?

+0

Funciona bien para mí. Envía datos json correctamente con codificación de contenido gzip en php 5.5.15 –

Respuesta

7

No lo creo ... He usado archivos estáticos almacenados como gzip JSON antes, y funcionó bien con AJAX.

edición: Revisé mi script php y la única cosa especial que hice fue para incluir estos encabezados:

Content-Encoding: gzip 
Content-Type: text/plain 

Si recuerdo bien, cada vez que trataba de cambiar el tipo de contenido a algo que indicaría JSON, el cliente tenía problemas.

+0

Eso es interesante. Yo uso application/json porque pensé que eso es lo que deberías hacer por json. – Jordie

+0

Estoy tratando de recordar el problema exacto que tuve. Pudo haber sido que a la parte AJAX no le importó, pero para la depuración fue un gran dolor porque Firefox no sabe cómo mostrar la aplicación/JSON, mientras que funciona bien con texto/normal. –

+0

(por "depuración" me refiero a ver la URL JSON directamente en mi navegador, en lugar de poner puntos de interrupción/inicio de sesión en la parte AJAX de mi aplicación) –

2

Puede dar contenido comprimido cuando el navegador especifique gzip en el encabezado de solicitud Accept-Encoding. En ese caso, no hay diferencia entre JSON y HTML y no se causarán problemas de ningún tipo.

3

Algunos navegadores antiguos, como ciertas versiones de IE6, arruinan el contenido comprimido, especialmente el contenido js.

sólo comprueba que el servidor envía la cabecera Content-Encoding adecuada, es decir

Content-Encoding: gzip 

También debe comprobar las cabeceras enviadas por el navegador para el correcto Accept-Encoding cabecera antes de enviar contenido gzipped ... que es ,

Accept-Encoding: gzip,deflate 
+0

Pero esto es lo que ob_gzhandler está haciendo ¿verdad? – Jordie

+0

Esa es la idea con ob_gzhandler – Jayrox

1

en lugar de habilitar la compresión en PHP, me gustaría habilitar la compresión en Apache (usando mod_deflate) para que pueda comprobar si hay varios navegadores incompatibles y sólo enviar datos comprimidos para los navegadores que aceptan y manejarlo correcta ly.

http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

+1

Eso es lo que hace ob_gzhandler. Prefiero el control programático. – Jordie

Cuestiones relacionadas