В HTML страницы бэкендом выдаются элементы <link rel="preload"> с указанием на ресурсы для предзагрузки.
Хотелось бы перейти с предзагрузки на http2_push указанных ресурсов.
Казалось бы, нет проблемы перейти на заголовок Link, который модулем ngx_http_v2_module при http2_push_preload on будет преобразован в push'и.
Однако, в путях к ресурсам используются SSI-вставки с текущими версиями, а HTML вместе в SSI-директивами хранится в кэше.
Условно:
<html>
<head>
<link rel="preload" href="/css/style.css?<!--#echo var="style_css_version" default="1"-->" as="style"/>
…
<link rel="stylesheet" href="/css/style.css?<!--#echo var="style_css_version" default="1"-->"/>
…
</head>
<body>
…
</body>
</html>
А после работы SSI получаем нужный результат:
<html>
<head>
<link rel="preload" href="/css/style.css?123456789" as="style"/>
…
<link rel="stylesheet" href="/css/style.css?123456789"/>
…
</head>
<body>
…
</body>
</html>
Выходит, поможет либо поддержка SSI в заголовках ответа — чего nginx не умеет, либо поддержка модулем ngx_http_v2_module преобразования <link rel="preload"> в http2_push.
Посмотрел, было, в строну njs в надежде что смогу процессить тело ответа после SSI, выкусывать оттуда <link rel="preload">, преобразовывать их в Link-заголовки, которые затем будут преобразованы в ngx_http_v2_module в push'и, но в js_content тело ответа оказалось пустым, а js_filter работает на уровне stream'а.
Так же попробовал использовать js_set для формирования заголовка Link на основе <link rel="preload"> в теле, но в этом случае в теле <link rel="preload"> в теле сохранятся и неясно как поведёт себя браузер при получении и preload-инструкций и http2_push'а.
Нет ли в планах поддерживать преобразования <link rel="preload"> в http2_push?
Хотелось бы перейти с предзагрузки на http2_push указанных ресурсов.
Казалось бы, нет проблемы перейти на заголовок Link, который модулем ngx_http_v2_module при http2_push_preload on будет преобразован в push'и.
Однако, в путях к ресурсам используются SSI-вставки с текущими версиями, а HTML вместе в SSI-директивами хранится в кэше.
Условно:
<html>
<head>
<link rel="preload" href="/css/style.css?<!--#echo var="style_css_version" default="1"-->" as="style"/>
…
<link rel="stylesheet" href="/css/style.css?<!--#echo var="style_css_version" default="1"-->"/>
…
</head>
<body>
…
</body>
</html>
А после работы SSI получаем нужный результат:
<html>
<head>
<link rel="preload" href="/css/style.css?123456789" as="style"/>
…
<link rel="stylesheet" href="/css/style.css?123456789"/>
…
</head>
<body>
…
</body>
</html>
Выходит, поможет либо поддержка SSI в заголовках ответа — чего nginx не умеет, либо поддержка модулем ngx_http_v2_module преобразования <link rel="preload"> в http2_push.
Посмотрел, было, в строну njs в надежде что смогу процессить тело ответа после SSI, выкусывать оттуда <link rel="preload">, преобразовывать их в Link-заголовки, которые затем будут преобразованы в ngx_http_v2_module в push'и, но в js_content тело ответа оказалось пустым, а js_filter работает на уровне stream'а.
Так же попробовал использовать js_set для формирования заголовка Link на основе <link rel="preload"> в теле, но в этом случае в теле <link rel="preload"> в теле сохранятся и неясно как поведёт себя браузер при получении и preload-инструкций и http2_push'а.
Нет ли в планах поддерживать преобразования <link rel="preload"> в http2_push?