2010-09-23 18 views
20

Tengo un servicio web que está dispuesto a generar datos gzip/deflated. He verificado que el servicio responderá con JSON sin procesar o con gzip'd JSON con wget y curl.¿Es posible obligar a jQuery a realizar llamadas AJAX para URL con habilitado gzip/deflate?

Quiero consumir este servicio web utilizando la llamada jQuery AJAX.

De manera predeterminada, la llamada $ .ajax que proporciona jQuery no agrega el encabezado de solicitud HTTP "Aceptar codificación: gzip" que es necesario para que el servidor web responda con datos comprimidos.

Sin embargo, cuando se utiliza propios métodos de jQuery para agregar el encabezado, por ejemplo:

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

continuación, aparece el siguiente error en la consola del navegador:

Refused to set unsafe header "Accept-Encoding" 

¿Es posible forzar jQuery para hacer llamadas AJAX para URL con gzip/deflate habilitado?

Si no es así, ¿esto es una deficiencia en jQuery, o algo más fundamental con AJAX?

+1

Creo que el navegador decide si acepta gzip/desinflar o no. "Fingir" esto podría conducir a la corrupción de datos. – jwueller

Respuesta

38

Los navegadores agregan automáticamente el encabezado de codificación de aceptación según corresponda, incluso en las solicitudes de XHR. No necesita hacer eso en el nivel DOM/JS.

+0

gracias, ¡tienes razón! Debería haber revisado los registros de mi servidor más de cerca. – Lee

+0

¿Es esto cierto para las aplicaciones híbridas HTML5 también? ¿Se ejecuta en dispositivos móviles, en un contenedor de vista web ...? – demaniak

+0

@demaniak: debería ser, sí. ¿Ves comportamiento diferente en una vista web en particular? –

Cuestiones relacionadas