Frage

Meine JavaScript -Anwendung muss die Länge einer Ressource bestimmen Vor Herunterladen mit Ajax. Normalerweise ist dies kein Problem, Sie stellen nur eine Kopfanfrage und extrahieren die Content-Length.

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

Die Ressourcen werden jedoch auf einem anderen Server als Client gespeichert. (Ein Server, den ich steuere). Daher verwende ich CORs, um Cross -Domain AJAX -Anforderungen zu erstellen, und habe den Server so eingerichtet, dass er auf Anfragen für Kopfanfragen und Anforderungen mit benutzerdefinierten Headern vorgezogen wird.

Das funktioniert in der Hauptsache hervorragend, aber ich kann keinen Weg finden Content-Length Aus der Kopfreaktion bei der Arbeit mit CORs:

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

Ich habe mit dem Einstellen verschiedener Header im Vorflug oder in der Antwort experimentiert, wie z.

Access-Control-Expose-Headers: Content-Length

Was die Spezifikation zu vermuten scheint, sollte es verfügbar machen. Aber egal was ich tue, ich kann den Header der Inhaltslänge dem Kunden nicht zur Verfügung stellen. Irgendwelche Vorschläge?

(Chrom 8)

War es hilfreich?

Lösung

Ich habe festgestellt, dass CORS -Antwort -Header -Unterstützung in allen Browsern fehlerhaft ist. In Chrome/Safari sehe ich nur einfache Reaktionsheader (http://www.w3.org/tr/cors/#terminology) im Ergebnis von GetAllResponseHeaders (), auch wenn der Header "Access-Control-Expose-Header" ist in der Antwort eingestellt. Und in Firefox 3.6.13 gibt GetAllresponseHeaders () nichts zurück (nicht einmal einfache Antwort -Header). Als Problemumgehung könnten Sie eine der einfachen Reaktionsüberschriften überlasten, um die Inhaltslänge einzuschließen, aber dies kann andere Probleme verursachen und würde Firefox immer noch nicht beheben.

Andere Tipps

Ich hatte das gleiche Problem, bis ich woanders einen Thread fand, der mir beigebracht hat, diese Zeile auf meinem .htaccess hinzuzufügen:

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

Dann boom, es wurde repariert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top