nginx Http2 Push не удается, когда Vary: Accept header set set - PullRequest
0 голосов
/ 19 сентября 2019

По сути, http2 push с использованием http2_push_preload не работает, если вы установили заголовок. Vary: Принять ответ, потому что вы выполняете согласование содержимого с использованием заголовка запроса Accept.Я использую согласование содержимого для отправки (http2 push) изображений webp вместо jpg клиентам, которые его поддерживают.

HTTP / 2 Push работает для файлов .js, .css и всех в одном вызове и показывает «Push / Other» в Chrome DevTools, но не работает в этом единственном уникальном случае (содержание jpg согласовано с webp),и показывает просто «Другое» (не выдвигается) в Chrome DevTools.

Согласование содержимого для сжатия brotli, gzip - все работает нормально и передается правильно, используя Vary: Accept-Encoding и то же самое для языков, использующих Vary: Accept-Language.

Only Vary: Принять не удалось.Пожалуйста, помогите, я собираюсь сдаться.

PS: я просматривал исходный код nginx https://github.com/nginx/nginx/blob/master/src/http/v2/ngx_http_v2.c. Сделайте Crtl + F, и вы найдете случаи только для "Accept-Encoding" и "Accept-Language", ничего для "Accept".Так что я думаю, что «Accept» еще не поддерживается nginx ??

PPS: я не перегружаюсь, только использую http2 push для изображения героя.

Редактировать: вот билет об ошибке на сайте nginx для тех, кто хочет его отслеживать: https://trac.nginx.org/nginx/ticket/1851 https://trac.nginx.org/nginx/ticket/1817

Редактировать 2: Команда Nginx ответила, что не собираетсячтобы поддержать его из-за соображений безопасности (вы можете найти ответ в дублирующем сообщении об ошибке), который, я считаю, происходит из-за разногласия из разных источников, таких как CDN?В любом случае, мне нужна эта функция, поэтому остается только:

  1. Создать собственный патч или пакет.

  2. Использовать другой серверпрограммное обеспечение, которое поддерживает это.

  3. Внедрение в коде веб-сайта функции перезаписи путей .jpg к .jpg.webp, если запросы поступают от клиентов, которые поддерживают webp.

(я не сдаюсь: P)

1 Ответ

0 голосов
/ 19 сентября 2019

Я не совсем удивлен этим, и Apache делает то же самое .Если вы хотите, чтобы это изменилось, предложите поднять ошибку с nginx, но не удивитесь, если бы они не расставили ее по приоритетам.

Также кажется, браузеры не очень хорошо справляются с этой ситуацией..

HTTP / 2 push таит в себе возможности для over push, и это один из примеров.Вы не должны настаивать, если клиент не поддерживает WebP, и вы часто не будете знать об этом с информацией, которая у вас есть на данный момент.Похоже, что Chrome отправляет webp в заголовке accept, когда вы, например, запрашиваете HTML, но Firefox этого не делает.

Предварительная загрузка - намного лучший, безопасный вариант, который учитывает различные заголовки, а также состояние кэширования.

...