Re: proxy_store и ranges

Maxim Dounin mdounin на mdounin.ru
Чт Апр 23 13:01:40 UTC 2020


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