Domanda

La mia applicazione JavaScript deve determinare la lunghezza di una risorsa prima scaricandolo con Ajax. Di solito questo non è un problema, fai solo una richiesta di testa ed estrai il Content-Length.

var xhr = $.ajax({type:"HEAD", url: "http://own-domain/file.html"})
xhr.getResponseHeader("Content-Length")  
// "2195"

Tuttavia, le risorse sono archiviate su un server diverso al client. (Un server che controlla). Quindi sto usando CORS per effettuare richieste Ajax Cross Domain e ho impostato il server per rispondere alle richieste di preflighting per le richieste di testa e ottenere/ottenere richieste con intestazioni personalizzate.

Che funziona alla grande nel principale, ma non riesco a trovare un modo per estrarre il Content-Length Dalla risposta alla testa quando si lavora con Cors:

var xhr = $.ajax({type:"HEAD", url: "http://other-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// ERROR: Refused to get unsafe header "Content-Length"

Ho sperimentato l'impostazione di varie intestazioni nel preflight o nella risposta, come

Access-Control-Expose-Headers: Content-Length

che la specifica sembra suggerire dovrebbe renderlo disponibile. Ma non importa quello che faccio, non riesco a rendere disponibile l'intestazione a lungo termine per il cliente. Eventuali suggerimenti?

(Chrome 8)

È stato utile?

Soluzione

Ho trovato il supporto dell'intestazione della risposta Cors in tutti i browser BUNGGY. In Chrome/Safari, vedo solo le intestazioni di risposta semplice (http://www.w3.org/tr/cors/#terminology) nel risultato di getallresponseheaders (), anche quando l'intestazione "accessi-control-expose-headers" è impostato nella risposta. E in Firefox 3.6.13, GetAllResponseheaders () non restituisce nulla (nemmeno le intestazioni di risposta semplice). Come soluzione alternativa, suppongo che potresti sovraccaricare una delle semplici intestazioni di risposta per includere la lunghezza del contenuto, ma ciò potrebbe causare altri problemi e ancora non risolverebbe Firefox.

Altri suggerimenti

Stavo avendo lo stesso problema, finché non ho trovato un thread da qualche altra parte che mi ha insegnato ad aggiungere questa linea sul mio .htaccess:

Header add Access-Control-Expose-Headers "Content-Length"

Quindi boom, è stato riparato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top