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