Moja aplikacja JavaScript musi określić długość zasobu przed pobierając go z Ajax. Zazwyczaj nie stanowi to problemu, wystarczy, że wykonasz żądanie HEAD i wyodrębnisz Content-Length
.Jak uzyskać dostęp do nagłówka Content-Length z żądania ajaxowego między domenami?
var xhr = $.ajax({type:"HEAD", url: "http://own-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// "2195"
Jednak zasoby są przechowywane na innym serwerze niż klient. (Serwer, który kontroluję). Używam więc CORS do wysyłania zapytań ajaxowych w domenie krzyżowej i skonfigurowałem serwer do odpowiadania na żądania preflightów dla żądań HEAD i GET/POST z niestandardowymi nagłówkami.
To działa świetnie w głównym, ale nie wydaje się znaleźć sposób wyodrębnić z Content-Length
z odpowiedzi HEAD podczas pracy z CORS:
var xhr = $.ajax({type:"HEAD", url: "http://other-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// ERROR: Refused to get unsafe header "Content-Length"
Mam eksperymentował z ustawieniem różnych nagłówków w preflightu lub w odpowiedzi, takie jak
Access-Control-Expose-Headers: Content-Length
którego specyfikacja wydaje się sugerować, powinna udostępnić go. Ale nie ważne, co robię, nie wydaje mi się, aby nagłówek Content-Length był dostępny dla klienta. Jakieś sugestie?
(Chrome 8)
Dobrze. Czy uważasz, że powinno to zostać zgłoszone jako błąd w Webkit? –
Tak. Najpierw spróbuj wyszukać, myślałem, że widziałem wcześniej błąd, ale nie mogę go teraz znaleźć. – monsur