Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ngx_http_bytes_filter_module & Content-Range
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
|