Назад | Перейти на главную страницу

Почему cloudflare возвращает два разных формата одних и тех же изображений, даже если оба ХИТ

Я включил польский язык в Cloudflare.

При первой загрузке изображения в Chrome (Version 75.0.3770.142 (Official Build) (64-bit) в OSX), консоль chrome dev показывает следующую информацию:

* age: 12286
* cache-control: public, max-age=31556926
* cf-bgj: imgq:85
* cf-cache-status: HIT
* cf-polished: degrade=85, origSize=25843, status=vary_header_present
* cf-ray: 4fe67aba4d6b6549-SYD
* content-length: 5951
* content-type: image/jpeg
* date: Tue, 30 Jul 2019 09:59:21 GMT
* etag: "9314546c183b5befa64e265c89dc981f"
* expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
* expires: Wed, 29 Jul 2020 15:48:07 GMT
* last-modified: Thu, 11 Jul 2019 06:18:02 GMT
* server: cloudflare
* status: 200

Затем, когда я получаю доступ к тому же изображению в той же версии, но в режиме инкогнито, я получаю следующее:

* age: 21
* cache-control: public, max-age=31556926
* cf-bgj: imgq:85
* cf-cache-status: HIT
* cf-polished: qual=85, origFmt=jpeg, origSize=25843
* cf-ray: 4fe68b808803da4a-SYD
* content-disposition: inline; filename="image.webp"
* content-length: 3764
* content-type: image/webp
* date: Tue, 30 Jul 2019 10:10:49 GMT
* etag: "9314546c183b5befa64e265c89dc981f"
* expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
* expires: Wed, 29 Jul 2020 15:59:35 GMT
* last-modified: Thu, 11 Jul 2019 06:18:02 GMT
* server: cloudflare
* status: 200

Я не понимаю: если оба доступа - HIT (т.е. есть кешированные изображения в CDN), почему я получил webp второй раз?

В моем первом запросе заголовок выглядит так:

:authority: public.my-server.com
:method: GET
:path: /image.jpg
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
accept-encoding: gzip, deflate, br
accept-language: en-GB,en-US;q=0.9,en;q=0.8,zh-TW;q=0.7,zh-CN;q=0.6,zh;q=0.5
cache-control: no-cache
cookie: __cfduid=xxxxx
pragma: no-cache
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36

Второй запрос прост:

Origin: https://public.my-server.com
Referer: https://public.my-server.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36

Почему разные типы изображений?

Польский предназначен для создания веб-страниц iff заголовок Accept из браузера включает WebP, и сжатое изображение значительно меньше, чем сжатие с потерями или без потерь. По этой ссылке в блоге также см. "Обратите внимание, что преобразование WebP не изменяет URL-адреса изображений, даже если расширение файла в URL-адресе подразумевает другой формат. Например, изображение в формате JPEG на https://example.com/picture.jpg который был преобразован в WebP, по-прежнему будет иметь тот же URL. HTTP-заголовок Content-Type сообщает браузеру истинный формат изображения.'

В первый раз, когда он был загружен (jpg), он, вероятно, был из собственного кеша вашего браузера, учитывая длительное время кеширования, но он показал новые заголовки. В режиме инкогнито у него не было доступного кеша, поэтому взял польскую версию. Что касается того, почему заголовки запросов разные, это похоже на проблему на стороне клиента, возможно, вы изменили некоторые флаги, чтобы отправлять только определенные заголовки, когда не в режиме инкогнито?

Да, и для тех, кто совершенно не понимает, почему добавление языка может испортить изображения, Польский - это функция Cloudflare для изменения размера изображений, а не язык!