2010-09-23 14 views
20

Ho un servizio Web che è disposto a emettere dati gzip/sgonfiati. Ho verificato che il servizio risponderà con JSON non elaborato o con JSON gzip usando wget e curl.È possibile forzare jQuery a effettuare chiamate AJAX per URL con gzip/deflate abilitato?

Desidero utilizzare questo servizio Web utilizzando la chiamata jQuery AJAX.

Per impostazione predefinita, la chiamata $ .ajax fornita da jQuery non aggiunge l'intestazione di richiesta HTTP "Accept-Encoding: gzip" necessaria per consentire al server Web di rispondere con dati compressi.

Tuttavia, quando uso propri metodi di jQuery per aggiungere l'intestazione, ad esempio:

$.ajax({url: 'http://foo.com/service.json', 
     beforeSend: function(xhr) { 
      console.log('xhr set'); 
      xhr.setRequestHeader('Accept-Encoding', 'deflate') 
     } 
}); 

quindi il seguente errore viene visualizzato nella console del browser:

Refused to set unsafe header "Accept-Encoding" 

E 'possibile forzare jQuery per effettuare chiamate AJAX per gli URL con gzip/deflate abilitato?

In caso contrario, si tratta di una mancanza in jQuery o di qualcosa di più fondamentale con AJAX?

+1

Penso che il browser decida se accetta gzip/deflate oppure no. "Faking" questo potrebbe portare alla corruzione dei dati. – jwueller

risposta

38

I browser aggiungono automaticamente l'intestazione accept-encoding come appropriato, anche sulle richieste XHR. Non è necessario farlo a livello di DOM/JS.

+0

grazie, hai ragione! Avrei dovuto controllare i registri del mio server più da vicino. – Lee

+0

È vero anche per le applicazioni ibride HTML5? Funzionando su dispositivi mobili, in un contenitore di Webview ....? – demaniak

+0

@demaniak: dovrebbe essere, sì. Stai vedendo un comportamento diverso in una particolare webview? –

Problemi correlati