On Tue, Feb 27, 2018 at 10:17:07AM +0300, Nick Lavlinsky - Method Lab wrote: > Здравствуйте! > > Начал тестировать http2_push сразу после релиза. Появилось 2 вопроса. > > 1. Есть ли возможность пушить ресурсы до ответа на основной запрос (так > делает у себя Fastly, называя async push)? Таким образом можно получить > экономию не только в 1RTT, но и за счет серверного времени на генерацию > html (https://www.fastly.com/blog/optimizing-http2-server-push-fastly).
Нет, сейчас такой возможности нет и вряд ли она появится. Сейчас nginx дожидается заголовка ответа на основной запрос, прежде чем отправить PUSH_PROMISE'ы и собственно начать пушить ответы. Причин тому несколько. Во-первых, это единственный способ при конвертации Link preload'ов в push'и. Во-вторых, если так не делать, и ответа на основной запрос нет (например, бэкенд неживой), то непонятно, на каком основании вообще мы должны делать push. > 2. При использовании директивы http2_push в конфиге сайта браузеры > (Chrome Stable и 66, FF 58.0.2) показывают, что только 1 ресурс был > запушен, хотя стоят сразу несколько (смотрю в DevTools с отключенным > кэшем). Например: > > location / { > proxy_pass http://127.0.0.1:9090/pcgi/index.pl?$uri?&$args; > proxy_redirect off; > > proxy_set_header Host $host; > proxy_set_header X-Real-IP $remote_addr; > proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; > > http2_push /css/colorbox.css; > http2_push /img/design/logo.png; > http2_push /js/core.js; > http2_push /images/border.png; > http2_push /img/no_foto.png; > http2_push /js/jq/jquery-2.1.3.min.js; > > } > > В браузерах отображается в виде push только /img/design/logo.png, так > как этот ресурс используется на странице (остальные - нет). Поведение > одинаково и в Chrome и в FF. > > Если делать push через заголовок Link (http2_push_preload on;), то в > Chrome все ресурсы показываются в DevTools. При этом внизу выдаётся warning, что некоторые ресурсы не используются. > В FF показываются только те > ресурсы, которые используются на странице. > > При анализе загрузки ресурсов через nghttp -ans или Webpagetest всегда > (и в http2_push, и в http2_push_preload) видны все push запросы. > > Не знаю, бага это или фича, может будет полезно. В chrome://net-internals/#http2 видно, что они push'атся. Почему так по-разному показывает DevTools, я лично не знаю. Но это точно не вопрос к nginx'у. _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru