CDN - обслуживать другой тип контента на основе заголовка Accept (Verizon / EdgeCast Premium)? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть сервер, который возвращает другой ответ, основанный на заголовке Accept, например, если заголовок Accept включает в себя «image / webp», изображение webp подается, в противном случае - jpg.

Мы запускаем Varnish вна уровне сервера, и он делает это правильно, как в следующем примере:

Запрос (с изображением / webp в заголовке Accept):

curl -s -D - -o /dev/null "https://REDACTED/media/tokinoha_bowl-4.jpg?sh=2&fmt=webp,jpg" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"

Ответ (обслуживаемое изображение webp):

HTTP/2 200 
date: Wed, 06 Feb 2019 08:25:05 GMT
content-type: image/webp
access-control-allow-origin: *
cache-control: public, s-maxage=31536000, max-age=31536000
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
strict-transport-security: max-age=31536000; includeSubDomains
vary: Accept-Encoding, Accept-Encoding,Origin
referrer-policy: strict-origin-when-cross-origin
accept-ranges: bytes
content-length: 60028

Запрос (нет webp в заголовке Accept, jpg обслужен):

curl -s -D - -o /dev/null "https://REDACTED/media/tokinoha_bowl-4.jpg?sh=2&fmt=webp,jpg" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/apng,*/*;q=0.8"

Ответ:

HTTP/2 200 
date: Wed, 06 Feb 2019 08:25:18 GMT
content-type: image/jpeg
access-control-allow-origin: *
cache-control: public, s-maxage=31536000, max-age=31536000
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
strict-transport-security: max-age=31536000; includeSubDomains
vary: Accept-Encoding, Accept-Encoding,Origin
referrer-policy: strict-origin-when-cross-origin
accept-ranges: bytes
content-length: 166991

У нас есть следующие параметры в настройке движка правил,однако какой бы тип содержимого не кэшировался первым, он обслуживается во всех последующих запросах независимо от заголовка запроса.

Настройки Engine Rules

enter image description here

Кто-нибудь знает способ достижения этого?

Заранее спасибо!

1 Ответ

0 голосов
/ 15 августа 2019

У нас была та же проблема с Verizon/Edgecast: Один URL доставил два разных типа изображения (JPEG и WebP) в зависимости от заголовка Accept.Источник (imgix) отправил правильно Vary: Accept, но Edgecast проигнорировал это и кэшировал то, что получил, и поэтому браузеры без поддержки WebP иногда получали неправильный формат.

Мы решили это с помощью правила в Edgecast: Правило WebP

Параметр запроса auto всегда является частью URL и поэтому всегда может быть удален из ключа кэша.Со вторым параметром запроса varyWebP мы определенно распознаем URL-адреса и предотвращаем конфликт с URL-адресами без параметра запроса auto.

. В этом случае URL

https://[HOST]/[PATH]?a=1&b=2&c=3&auto=compress,format

создает тот же кешвведите как:

https://[HOST]/[PATH]?a=1&b=2&c=3

Именно поэтому параметр запроса varyWebP защищает нас.

...