Cloudflare

為什麼即使兩者都是 HIT,cloudflare 也會返回兩種不同格式的相同圖像

  • September 3, 2019

我在 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

為什麼不同的圖像類型?

如果來自瀏覽器的 Accept 標頭包含 WebP 並且壓縮圖像明顯小於有損或無損壓縮,則波蘭語旨在生成 webp 。從此部落格連結中,還可以看到’請注意,WebP 轉換不會更改圖像的 URL,即使 URL 中的文件副檔名意味著不同的格式。例如,已轉換為 WebP的位於https://example.com/picture.jpg的 JPEG 圖像仍具有相同的 URL。“Content-Type”HTTP 標頭告訴瀏覽器圖像的真實格式。'

第一次載入(jpg)時,它可能來自瀏覽器自己的記憶體,因為可用的記憶體時間很長,但它顯示了新的標題。在隱身模式下,它沒有可用的記憶體,因此採用了波蘭語版本。至於為什麼請求標頭不同,這似乎是客戶端問題,也許您已經更改了一些標誌以僅在不隱身時發送某些標頭?

哦,而且,對於任何對為什麼添加語言會弄亂圖像感到完全困惑的人來說,波蘭語是用於調整圖像大小的 Cloudflare 功能,而不是語言!

引用自:https://serverfault.com/questions/977242