2012-03-22 18 views
10

estoy usando la llamada ajax de jQuery para hacer una petición CORS y su trabajo si fijosolicitud jQuery CORS no funciona cuando se envía la solicitud Rango

var headers = {}; 

Pero dado que el contenido que estoy tratando de llegar es bastante grande , me gustaría enviar encabezados de rango.

(todo esto está probado y trabajando en mismo dominio)

Así, cuando hago esto:

var headers = {"Range":"bytes=" + start + "-" + end}; 


$.ajax({ 
    url:url, 
    type:type, 
    headers:headers, 
    dataType:dataType, 
    success:function (data, status, jqXHR) { 

     // 

    }, error:function (data, status, jqXHR) { 

     // 
    } 
}); 

Para nuestro otro dominio, la solicitud se cancela en el último cromo, y FF.

Si apago los encabezados, todo funciona, pero luego obtengo megabytes de datos y el navegador no puede manejar/analizar esa cantidad de datos.

Éstos son los encabezados de servidor (i control de esto, por lo que puedo editarlo)

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: OPTIONS, GET, POST 
Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Range, Origin 
Access-Control-Expose-Headers: Content-Range 
Access-Control-Max-Age: 3600 

¿Hice algo mal, o enviar la solicitud rango sobre el CORS aún no se aplica correctamente en los navegadores más recientes?

(Nota al margen, también cromo no devuelve las cabeceras incluso si permito en Expose-encabezados, pero lo que se sabe error en la lista de correo de cromo, pero puedo hacer una petición de un get primero para averiguar el tamaño del archivo)

+1

¿Ha intentado configurar los encabezados del servidor para devolver el dominio real que realizó la solicitud para 'Access-Control-Allow-Origin' en lugar de' * '? –

+0

sí, nada cambia – kodisha

+0

es el URL de dominio cruzado que está solicitando está disponible para probar –

Respuesta

9

Tuve un problema similar mientras trabajaba en mi último proyecto. Esto es lo que hice:

1) sobre las opciones de la manija del lado del servidor Solicitud de regresar cabeceras de control de acceso como:

 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, OPTIONS 
Access-Control-Max-Age: 1000 
Access-Control-Allow-Headers: Origin, Content-Type, Accept 

2) en el método POST mango servidor y añade una cabecera

 
Access-Control-Allow-Origin: * 

3) en javascript:

 
jQuery.ajax({ 
     url: gate, 
     type: "POST", 
     data: JSON.stringify(post_data), 
     contentType: "application/json; charset=UTF-8", 
     crossDomain: true, 
     success: function(data){ 
      // 
     }, 
    }); 

Espero que ayude

Cuestiones relacionadas