Re: Подменить Status code
Maxim Dounin
mdounin на mdounin.ru
Пт Сен 23 18:02:13 UTC 2016
Hello!
On Fri, Sep 23, 2016 at 12:48:39PM -0400, jtiq wrote:
> > > никто не издевается, а просто из деревни в этих модулях, тем более в
> > README
> > > ничего нет, кроме того как включить в конфиге модуль и какой
> > параметр
> > > передавать.
> >
> > Это ровно то, что нужно знать про сам модуль. Больше он ничего и
> > не умеет: принимает параметр со спецификацией нужных диапазонов в
> > соответствии с RFC2616, и возвращает запрошенное в виде 200-го ответа.
> >
> > > была бы нормальная документация, всё было бы норм, модуль частично
> > хорош, но
> > > нет длины файла в байтах целиком, при Range он передаётся в
> > заголовке через
> > > "/". Приходится изза этого юзать костыли, либо вовсе отказаться от
> > данного
> > > модуля.
> >
> > В range-_запросах_ длина ответа не передаётся. Длина через "/"
> > передаётся в заголовке Content-Range в ответах на range-запросы.
> > Т.к. модуль ответов на range-запросы не шлёт - он, соответственно,
> > заголовка Content-Range не отправляет, и не должен. Он шлёт
> > обычные 200-е ответы, и длины этих ответов отправляются так, как это
> > положено для 200-х ответов, в заголовках Content-Length.
> >
> > Если вам зачем-то ещё нужна полная длина исходного ответа -
> > протаскивайте её отдельно. В частности, если исходный ответ
> > получен с бекенда, это можно сделать с помощью стандартной
> > директивы add_header:
> >
> > add_header X-Original-Content-Length
> > $upstream_http_content_length;
> >
> > Но и я бы предложил в очередной раз задуматься, зачем вы всем этим
> > занимаетесь.
>
> полная длина НЕ исходного ответа, а файла целиком
Для bytes-фильтра файл целиком и есть исходный ответ.
> а нужен он для видео плеера, который работает в текущий момент на
> заголовках, но не устраивает что запросы с кодом 206 не кэшируются
> это нужно для кэша 200х ответов, передавая диапазон в УРЛ
Т.е. у вас всё работает с нормальными range-запросами, но что-то
где-то не кешируется, правильно? Где именно? Если не кешируется
в nginx'е, то проблема решается с помощью правильной конфигурации
кеша. Если на клиенте - то это вообще странно, т.к. исходя из
задачи клиент - ваш собственный.
> можно ли реализовать отдачу хотя бы оригинальных заголовков?
Нельзя. Bytes-фильтр меняет ответ, и соответственно должен
заменить служебные заголовки, в частности - должен заменить
Content-Length ответа на новый. Как получить длину исходного
ответа (она же - длина файла целиком) - я написал выше.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru