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