ngx_http_bytes_filter_module & Content-Range

Maxim Dounin mdounin at mdounin.ru
Wed May 27 19:12:49 MSD 2009


Hello!

On Tue, May 26, 2009 at 08:20:49PM +0300, Aleksej Novikov wrote:

> Hello Maxim,
> 
> Monday, May 25, 2009, 6:31:18 PM, you wrote:
> 
> > Hello!
> 
> > On Mon, May 25, 2009 at 06:00:11PM +0300, Aleksej Novikov wrote:
> 
> >>    Hello Nginx-ru,
> >> 
> >>      Возникла необходимость в специфической отдаче файлов с
> >>    использованием  Range запросов.
> >> 
> >>    Был обнаружен замечательный патч написанный Maxim Dounin под названием
> >>    ngx_http_bytes_filter_module
> 
> > Это не патч, это модуль.
> 
> Пардон !
> 
> 
> >>    И всё бы замечательно но столкнулся с проблемой. Когда я с помощью
> >>    этого модуля запрашиваю например отдать мне первые 100 байтов с 0 по 99
> >>    от файла размером 100 килобайт
> >> 
> >>    то nginx выдаёт в ответе свой собственный заголовок  Content-Range:
> >>    bytes 0-99/100  (с какого по какой запросил, и суммарный размер)
> >> 
> >>    А хотелось бы получить вместо этого  Content-Range: bytes 0-1/100000 -
> >>    то есть чтобы указывался полный размер файла, а не возвращаемый объём.
> >> 
> >>    Попытка погасить данный Header c использованием fastch_hide_header
> >>    ничего не дала - заголовок явно ставиться после работы модуля (в
> >>    internal location)
> >> 
> >>    Может кто-то может порекомендовать решение длля возникшей проблемы ?
> 
> > Выкинуть ngx_http_bytes_filter_module - он вам не нужен.  
> > Используйте просто range-запросы.
> 
> > Модуль ngx_http_bytes_filter_module нужен в том случае, если 
> > требуется получить кусок файла в виде отдельного документа.
> 
> Дело  в  том,  что  определение  того, какой range мне нужен (а точнее
> необходимо  отдать  клиенту)  определяется в момент запроса к серверу.
> Запрос   попадает   на   php  скрипт,  который  определяет  (получает)
> необходимый  range  и  делает X-Accel-Redirect на internal location  в
> котором используется ngx_http_bytes_filter_module и  происходит отдача
> указанного range. Отсюда и вырастает эта проблема.

RFC 2616 в разделе 10.2.7 206 Partial Content говорит нам, что 
если Range в запросе не было - то его возвращать нельзя.  А если в 
запросе он был - то непонятно зачем нужен бекенд и что именно он 
определяет.

> Был  бы признателен, Максим, если бы Вы подсказали как решить подобное
> без Вашего модуля.

Вы для начала сформулируйте на простом человеческом языке в чём 
состоит задача.  Не "бекенд определяет ...", а хотя бы "клиент 
приходит с запросом ... и должен получить в ответ ...".

Ну и определитесь заодно - клиент стандартный HTTP, или как сами 
напишете так и будет.

Maxim Dounin





More information about the nginx-ru mailing list