2009-03-18 26 views
9

Sto cercando di restringere alcune stranezze in corso con le mie chiamate AJAX. I miei script PHP hanno questo all'inizio:La codifica gzip è compatibile con JSON?

ob_start("ob_gzhandler"); 

Funziona alla grande con HTML. Ma ci sono problemi nel farlo con i dati dell'applicazione/JSON? Qualche problema del browser di cui qualcuno è a conoscenza?

+0

Per me funziona bene. Invia correttamente i dati JSON con codifica del contenuto gzip in php 5.5.15 –

risposta

7

Io non la penso così ... Ho usato i file statici memorizzati come JSON con gzip prima e ha funzionato bene con AJAX.

edit: ho controllato il mio script php e l'unica cosa speciale che ho fatto è stato per includere queste intestazioni:

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

Se ricordo bene, ogni volta che ho provato a cambiare il Content-Type a qualcosa che Indicherebbe JSON, il cliente ha avuto problemi.

+0

Questo è interessante. Io uso application/json cos pensavo che fosse quello che dovresti fare per json. – Jordie

+0

Sto cercando di ricordare il problema esatto che ho avuto. Può darsi che la parte AJAX non gli dispiacesse, ma per il debug è stato un grosso problema perché Firefox non sa come visualizzare l'applicazione/JSON, mentre funziona bene con text/plain. –

+0

(per "debugging" intendo visualizzare l'url JSON direttamente nel mio browser, piuttosto che inserendo punti di interruzione/registrazione nella parte AJAX della mia applicazione) –

2

È possibile distribuire contenuto gzip quando il browser specifica gzip nell'intestazione della richiesta Accept-Encoding. In tal caso, non vi è alcuna differenza tra JSON e HTML e nessun problema verrà causato.

3

Alcuni browser più vecchi, come alcune versioni di IE6, rovinano il contenuto gzip, in particolare il contenuto di js.

Basta controllare che il server invia una corretta intestazione Content-Encoding, cioè

Content-Encoding: gzip 

Si dovrebbe anche controllare le intestazioni inviati dal browser per una corretta Accept-Encoding prima di inviare contenuto compresso ... che è ,

Accept-Encoding: gzip,deflate 
+0

Ma questo è ciò che ob_gzhandler sta facendo bene? – Jordie

+0

Questa è l'idea con ob_gzhandler – Jayrox

1

Invece di abilitare la compressione in PHP, vorrei abilitare la compressione in Apache (utilizzando mod_deflate) in modo da poter verificare la presenza di vari browser incompatibili e solo inviare i dati compressi per i browser che accettano e gestire la cosa giusta LY.

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

+1

Ecco cosa fa ob_gzhandler. Preferisco il controllo programmatico. – Jordie

Problemi correlati