Re: proxy_store и ranges

2020-04-23 Пенетрантность Maxim Dounin
Hello!

On Thu, Apr 23, 2020 at 03:36:59PM +0300, Slawa Olhovchenkov wrote:

> On Thu, Apr 23, 2020 at 03:17:38PM +0300, Maxim Dounin wrote:
> 
> > Hello!
> > 
> > On Thu, Apr 23, 2020 at 12:23:16PM +0300, Slawa Olhovchenkov wrote:
> > 
> > > On Thu, Apr 23, 2020 at 01:09:52AM +0300, Maxim Dounin wrote:
> > > 
> > > > Hello!
> > > > 
> > > > On Wed, Apr 22, 2020 at 07:35:55PM +0300, Slawa Olhovchenkov wrote:
> > > > 
> > > > > А что происходит если у нас есть proxy_store а исходный запрос -- с
> > > > > ranges?
> > > > > Скачиваем и сохраняем все, отдаем кусок?
> > > > > Скачиваем и сохраняем кусок а потом глючим?
> > > > 
> > > > Директива proxy_store не предполагает собственной логики кроме 
> > > > собственно сохранения ответов.  При это сохраняются только ответы 
> > > > с кодом 200.  Соответственно если бекенд возвращает 206 (Partial 
> > > > content), то ответ сохранён не будет.
> > > > 
> > > > Если нужно, чтобы ответ всегда сохранялся - заголовок Range можно 
> > > > убрать из запроса на бекенд с помощью директивы proxy_set_header.  
> > > > Если при этом хочется ещё и вернуть клиенту ответ с учётом 
> > > > запрошенных диапазонов, то в простых случаях это можно сделать, 
> > > > включив директиву proxy_force_ranges.
> > > 
> > > а когда клиент -- это на самом деле модуль который сделал сабреквест
> > > -- это относится к простым случаям?
> > 
> > В подзапросах range'ей в общем случае не бывает вообще.
> 
> У меня -- есть.
> ок, может это формально не позапрос.
> Хотя по дебаг логу -- подзапрос (выборочное цититрование, да).

Тут какое дело.  То, что в рамках подзапроса можно отправить на 
бекенд range-запрос, добавив соответствующий заголовк Range - не 
значит, что в подзапросах есть range'и.  Это значит лишь то, что 
ответ на подзапрос доступен как есть, ровно то, что вернул бекенд.  
Что с этим делать - решает тот, кто соответствующие подзапросы 
создавал и обрабатывает.

Скажем, в частном случае модуля split - подзапросами запрашиваются 
куски файла с бекенда, и потом результат склеивается для ответа на 
запрос клиента, в том числе с учётом запрошенного клиентом 
диапазона.  Но разбираться с тем, что именно вернулось на 
конкретные подзапросы - это задача модуля split, который эти 
подзапросы делал, а не nginx'а.  Сам nginx занимается обработкой 
range-запросов только в рамках ответа на запросы клиентов.

Соответственно возвращаясь к исходному вопросу: если заголовка 
Range в подзапросе на бекенд не будет, то ответ бекенда ожидаемо 
будет полный.  Что с этим будет делать конкретный сторонний модуль - 
вопрос к конкретному стороннему модулю.

-- 
Maxim Dounin
http://mdounin.ru/
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy_store и ranges

2020-04-23 Пенетрантность Slawa Olhovchenkov
On Thu, Apr 23, 2020 at 01:09:52AM +0300, Maxim Dounin wrote:

> Hello!
> 
> On Wed, Apr 22, 2020 at 07:35:55PM +0300, Slawa Olhovchenkov wrote:
> 
> > А что происходит если у нас есть proxy_store а исходный запрос -- с
> > ranges?
> > Скачиваем и сохраняем все, отдаем кусок?
> > Скачиваем и сохраняем кусок а потом глючим?
> 
> Директива proxy_store не предполагает собственной логики кроме 
> собственно сохранения ответов.  При это сохраняются только ответы 
> с кодом 200.  Соответственно если бекенд возвращает 206 (Partial 
> content), то ответ сохранён не будет.
> 
> Если нужно, чтобы ответ всегда сохранялся - заголовок Range можно 
> убрать из запроса на бекенд с помощью директивы proxy_set_header.  
> Если при этом хочется ещё и вернуть клиенту ответ с учётом 
> запрошенных диапазонов, то в простых случаях это можно сделать, 
> включив директиву proxy_force_ranges.

а когда клиент -- это на самом деле модуль который сделал сабреквест
-- это относится к простым случаям?
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy_store и ranges

2020-04-22 Пенетрантность Maxim Dounin
Hello!

On Wed, Apr 22, 2020 at 07:35:55PM +0300, Slawa Olhovchenkov wrote:

> А что происходит если у нас есть proxy_store а исходный запрос -- с
> ranges?
> Скачиваем и сохраняем все, отдаем кусок?
> Скачиваем и сохраняем кусок а потом глючим?

Директива proxy_store не предполагает собственной логики кроме 
собственно сохранения ответов.  При это сохраняются только ответы 
с кодом 200.  Соответственно если бекенд возвращает 206 (Partial 
content), то ответ сохранён не будет.

Если нужно, чтобы ответ всегда сохранялся - заголовок Range можно 
убрать из запроса на бекенд с помощью директивы proxy_set_header.  
Если при этом хочется ещё и вернуть клиенту ответ с учётом 
запрошенных диапазонов, то в простых случаях это можно сделать, 
включив директиву proxy_force_ranges.

-- 
Maxim Dounin
http://mdounin.ru/
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru