Question

besoins d'application Mon JavaScript pour déterminer la longueur d'une ressource avant télécharger avec Ajax. Ordinairement ce n'est pas un problème, vous faites juste une requête HEAD et extraire le Content-Length.

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

Cependant, les ressources sont stockées sur un serveur différent au client. (Un serveur I témoin). Donc, j'utilise CORS pour faire des demandes de ajax de domaine croix, et ont mis en place le serveur pour répondre aux demandes des demandes de contrôle en amont de la tête et les requêtes GET / POST avec en-têtes personnalisés.

qui fonctionne bien dans l'ensemble, mais je ne peux pas sembler trouver un extrait de la façon dont Content-Length de la réponse HEAD lorsque vous travaillez avec CORS:

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

Je l'ai expérimenté avec le réglage de diverses têtes dans le preflighting ou dans la réponse, comme

Access-Control-Expose-Headers: Content-Length

la spécification qui semble suggérer devrait le rendre disponible. Mais peu importe ce que je fais, je ne peux pas sembler faire l'en-tête Content-Length à la disposition du client. Toutes les suggestions?

(Chrome 8)

Était-ce utile?

La solution

Je l'ai trouvé le soutien d'en-tête de réponse CORS dans tous les navigateurs pour être buggy. Dans Chrome / Safari, je ne vois en-têtes de réponse simples (http://www.w3.org/TR/cors/#terminology) dans le résultat de getAllResponseHeaders (), même si l'en-tête "Access-Control-Expose-têtes" est réglé dans la réponse. Et dans Firefox 3.6.13, getAllResponseHeaders () ne retourne rien (pas même en-têtes de réponse simples). Pour contourner ce problème, je suppose que vous pouvez surcharger un des en-têtes de réponse simples pour inclure la longueur du contenu, mais qui peuvent causer d'autres problèmes, et ne serait toujours pas fixer Firefox.

Autres conseils

Je faisais le même problème, jusqu'à ce que je trouve un fil quelque part d'autre qui m'a appris à ajouter cette ligne sur mon .htaccess:

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

Alors BOOM, il a été réparé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top