2012-03-22 24 views
10

sto usando chiamata ajax di jQuery per fare richiesta CORS e il suo lavoro, se ho impostatorichiesta jQuery CORS non funziona quando si invia richiesta Gamma

var headers = {}; 

Ma dal momento che il contenuto che sto cercando di ottenere è piuttosto grande , vorrei inviare intestazioni di gamma.

(questo è tutto provato e funzionando in stesso dominio)

Così, quando faccio questo:

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) { 

     // 
    } 
}); 

al nostro altro dominio, la richiesta viene annullata in ultima cromato, e FF.

Se spengo le intestazioni, tutto funziona, ma poi ottengo megabyte di dati e il browser non può gestire/analizzare quella quantità di dati.

Ecco le intestazioni da server (i controllano questo, quindi posso modificarlo)

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 

Ho fatto qualcosa di sbagliato, o l'invio di richiesta di intervallo in CORS non è ancora implementata correttamente nei browser più recenti?

(Nota a margine, anche Chrome non restituisce le intestazioni, anche se mi permetto loro in Expose-intestazioni, ma che è noto bug di cromo mailing list, ma posso fare richiesta di uno get primi a scoprire le dimensioni del file)

+1

Hai provato a impostare le intestazioni dal server per restituire il dominio effettivo che ha effettuato la richiesta per 'Access-Control-Allow-Origin' invece di' * '? –

+0

sì, nulla cambia – kodisha

+0

è l'URL del dominio incrociato che stai richiedendo è disponibile per testare –

risposta

9

Ho avuto un problema simile mentre lavoravo al mio ultimo progetto. Ecco quello che ho fatto:

1) di opzioni maniglia lato server richiesta di tornare intestazioni Access-controllo come:

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

2) il metodo POST manico server e aggiungere intestazione

 
Access-Control-Allow-Origin: * 

3) in javascript:

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

Spero che possa essere d'aiuto

Problemi correlati