为什么 cloudflare 会返回相同图像的两种不同格式,即使两者都是 HIT

为什么 cloudflare 会返回相同图像的两种不同格式,即使两者都是 HIT

我已经在 Cloudflare 中启用了 Polish。

当第一次在 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

我不明白的是:如果两次访问都是命中(即 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

为什么有不同类型的图像?

答案1

Polish 旨在生成 webp浏览器的 Accept 标头包含 WebP,并且压缩后的图像明显小于有损或无损压缩。从此博客链接,另请参阅'请注意,WebP 转换不会改变图像的 URL,即使 URL 中的文件扩展名表示不同的格式。例如,JPEG 图像https://example.com/picture.jpg已转换为 WebP 的图片仍具有相同的 URL。“Content-Type”HTTP 标头会告诉浏览器图片的真实格式。

第一次加载时(jpg)可能是从浏览器自己的缓存中加载的,因为可用的缓存时间很长,但它显示了新的标头。在隐身模式下,它没有可用的缓存,因此采用了波兰语版本。至于为什么请求标头不同,这似乎是客户端问题,也许您已更改一些标志以仅在非隐身模式下发送某些标头?

哦,还有,如果有人完全不明白为什么添加语言会扰乱图像,波兰语是 Cloudflare 的一项调整图像大小的功能,而不是语言!

相关内容