2011-01-31 2 views
15

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

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

Однако ресурсы хранятся на другом сервере для клиента. (Я контролирую сервер). Поэтому я использую CORS для создания запросов ajax для перекрестных доменов и настроил сервер для ответа на предпроверочные запросы на запросы HEAD и запросы GET/POST с пользовательскими заголовками.

Это работает прекрасно, в основном, но я не могу найти способ извлечь 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 

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

(Chrome 8)

ответ

3

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

+0

Право. Считаете ли вы, что это должно быть зарегистрировано как ошибка в Webkit? –

+0

Да. Сначала попробуйте выполнить поиск, я подумал, что раньше видел ошибку, но я не могу ее найти сейчас. – monsur

5

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

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

Тогда БУМ, она была исправлена.

+0

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers для деталей – broofa

 Смежные вопросы

  • Нет связанных вопросов^_^