Установка Content-Range в зависимости от Range (с подделанным Content-Length)

billgx nginx-forum at nginx.us
Fri Feb 8 16:56:59 UTC 2013


Суть проблемы:
Для воспроизведения браузером google chrome из тега <audio> файл формата ogg
будет проигран только после полного получения. Если у посетителя интернет со
скоростью 128kbps, то файл в 2 мб будет отдаваться достаточно долго.
Но если файл будет очень большого размера, то google chrome делает
проигрывание по мере загрузки файла (видимо это не баг, а специально сделано
так).

Задача:
Обмануть google chrome с его хитрым алгоритмом.
Казалось бы, поставив content-length большого размера решит проблему. Но
google chrome <audio> перед проигрыванием файла делает запрос на проверку
всего файла 

Заголовок запроса
Range: bytes=2657723-2723029

Заголовок ответа
Content-Length: 2723030
Content-Range: bytes 0-2723029/2723030

(этот запрос хочет получить почти весь файл за исключением начала файла,
после полученных 64 кб запрос отменяется, а браузер далее на слово верит,
что файл существует целиком, т.е. посути не важно иметь весь контент)

Такое происходит если файл действительно такого размера, но если "подсунуть"
мелкий файл в 1 мб и сказать что он 2723030 bytes, то возникает ошибка 
HTTP/1.1 416 Requested Range Not Satisfiable («запрашиваемый диапазон не
достижим»)


Вопрос:
Как можно перекрыть эту ошибку, и начать отдавать контент?
Такое вообще возможно?

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,236024,236024#msg-236024



Подробная информация о списке рассылки nginx-ru