Как я могу получить доступ к заголовку длины содержимого из перекрестного домена Ajax Ajax?

StackOverflow https://stackoverflow.com/questions/4850288

Вопрос

Мое приложение JavaScript должно определить длину ресурса до Загрузка его с Ajax. Обычно это не проблема, вы просто делаете запрос на голову и извлекаете Content-Length.

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

Тем не менее, ресурсы хранятся на другом сервере для клиента. (Сервер I управляю). Поэтому я использую CORS для выполнения запросов AJAX Cross Domain, и настраиваю сервер, чтобы ответить на предварительные запросы для запросов головки и получения запросов/публикаций с помощью пользовательских заголовков.

Это отлично работает в основном, но я не могу найти способ извлечения Content-Length от ответа головы при работе с CORS:

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

Я экспериментировал с установкой различных заголовков в предварительном подготовке или в ответе, например, как

Access-Control-Expose-Headers: Content-Length

что, по -видимому, спецификация должна сделать его доступным. Но независимо от того, что я делаю, я не могу сделать заголовок длины контента доступным для клиента. Какие-либо предложения?

(Хром 8)

Это было полезно?

Решение

Я обнаружил, что поддержка заголовка ответа CORS во всех браузерах была багги. В Chrome/Safari я вижу только простые заголовки ответов (http://www.w3.org/tr/cors/#terminology) в результате GetallResponseHeaders (), даже когда заголовок «Access-Control-Exe-expose» установлен в ответе. А в Firefox 3.6.13 GetallResponseHeaders () ничего не возвращает (даже не простые заголовки ответов). В качестве обходного пути, я полагаю, вы могли бы перегрузить один из простых заголовков ответа, чтобы включить длину контента, но это может вызвать другие проблемы, и все равно не исправят Firefox.

Другие советы

У меня была та же проблема, пока я не нашел нить в другом месте, которая научила меня добавлять эту линию на мою .htaccess:

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

Тогда бум, он был исправлен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top