Патч ETags в NixOS

Maxim Dounin mdounin на mdounin.ru
Вт Янв 9 02:26:08 UTC 2024


Hello!

On Sun, Jan 07, 2024 at 09:57:45AM +0300, izorkin на gmail.com wrote:

> Обнаружилась ещё одна ошибка с текущим вариантом патча:
> https://github.com/NixOS/nixpkgs/pull/278380
> 
> Некорректно кэшируются файлы, которые предварительно сжаты в формат
> gzip и/или brotli форматы.
> 
> Может получится найти какое-то альтернативный вариант решения генерации
> Etags для файлов, которые имеют фиксированную дату? 
> 
> Сейчас, Etags генерируется на основе размера файла + даты изменения.

ETag на основе размера файла и даты модификации файла - кажется 
вполне достаточным для уникальности в рамках требований к strong 
entity tags.  Тем более, что даже при совпадении ETag'ов между 
различными представлениями одного ресурса - сломаться что-либо 
может скорее теоретически, если вдруг меняются правила выбора 
представлений (e.g., включают или выключают gzip_static, а клиент 
в это время пытается делать range-запрос и комбинировать его с 
ранее полученными от другой конфигурации ответами).

Что либо менять в nginx'е я тут смысла не вижу, ETag сейчас 
содержит достаточно информации, чтобы проблем не возникало.

Что до nix store, то кажется, что возвращение размера в ETag также 
должно проблему решить.

> Поможет ли добавление ещё одного параметра, например полного пути к
> файлу? Получится такой вариант:
> размер файла + дата изменения + полный путь к файлу

Полный путь к файлу в ETag точно не имеет смысла.  Более того, его 
там быть точно не должно: если вдруг ресурс обслуживается двумя 
разными origin-серверами, это приведёт к требованию совпадения 
путей к файлу на этих серверах, а при их несовпадении - 
соответственно к полным ответам вместе 304, то есть сломает 
кэширование там, где оно сейчас работает.

Теоретически, наверное, можно пытаться в ETag вставлять какой-то 
идентификатор представления, то если для gzip_static добавлять в 
ETag что-нибудь вроде "...-gz".  Но при наличии размера в том же 
ETag'е смысла в этом исчезающие мало.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru