2016-01-20 120 views
4

我試圖得到一些HTML頁面被緩存的Cache-Control頭,以同樣的方式圖像將自動通過CloudFlare的緩存,但我不能讓CloudFlare的實際命中緩存爲HTML。不尊重上CloudFlare的

根據文檔(參考文獻:https://support.cloudflare.com/hc/en-us/articles/202775670-How-Do-I-Tell-CloudFlare-What-to-Cache-),它可能緩存有任何的Cache-Control設置爲publicmax-age大於0

我試過在我的出身Nginx的報頭的各種組合服務器沒有成功。從一個簡單的Cache-Control: public, max-age=31536000到更復雜的頭部包括s-maxage=31536000Pragma: publicETag: "569ff137-6"Expires: Thu, 31 Dec 2037 23:55:55 GMT沒有任何結果。

任何想法強迫的CloudFlare服務從自己的高速緩存中的HTML頁面?

PS:我在圖像上獲得CF-Cache-Status: HIT,它工作正常,但在html頁面上沒有任何內容,甚至沒有CF-Cache-Status: something。使用HTML頁面的CloudFlare頁面規則,它似乎工作正常,但我想避免使用一個,主要是因爲它太特定於CloudFlare。我沒有在這些網頁上提供cookies或任何動態內容。

回答

5

現在可以讓Cloudflare尊重您的Web服務器標題,而不是使用Browser Cache TTL設置中描述的最低標準覆蓋它們。

首先導航到CloudFlare的儀表板緩存選項卡:

Cloudflare Dashboard Caching tab

從這裏你可以向下滾動到「瀏覽器緩存過期」的設置,從這裏可以選擇「尊重現有的頭」選項下拉:

Respect Existing Headers Cloudflare

延伸閱讀:

注:如果不選擇該選項,CloudFlare的將應用的默認值4小時最低到緩存控制頭。設置此設置後,Cloudflare將不會觸及您的Cache-Control標頭(即使它們很低或根本不設置)。

0

的CF文檔是很清楚。進入「頁面規則」,並根據通配符定義打開緩存的規則 - 然後它將起作用。

2

我無意中發現了這一點。從它說的頁面

專業提示:從您的來源發送緩存指令的資源與我們不默認緩存的擴展將絕對沒有區別。要爲默認情況下我們不緩存的擴展指定緩存持續時間,您必須創建一個頁面規則來「緩存所有內容」。

這樣看來,你必須設定一個頁面規則來使用這個對於CloudFlare的默認情況下不緩存文件。本頁面描述得更詳細些,

https://blog.cloudflare.com/edge-cache-expire-ttl-easiest-way-to-override/

儘管如此它仍然沒有工作對我來說並沒有出現支持。他們在聯繫他們的支持後證實了這一點尊重原始標題已從所有計劃類型中刪除。所以如果你沒有頁面規則,他們會尊重原始頁眉。

但是,這並不能幫助他們找到HTML頁面的邊緣緩存。爲此你已經設置了一個頁面規則。一旦完成,我相信您可以將您的最大年齡設置爲低於您的計劃允許的最低年齡。任何更低,它會被覆蓋。也就是說,在沒有頁面規則的情況下,你可以說Cache-Control:max-age:30並且它會通過。使用包含邊緣緩存最大年齡的頁面規則,即使頁面規則未指定瀏覽器緩存,您的計劃仍允許最短時間。

+1

我有一張關於此權利的公開門票。似乎不可能做到像在所有URL上尊重緩存標題一樣簡單。要麼你不包括一個頁面規則,這意味着只有樣式表等才被緩存,關於源頭的標題,或者你創建了一個簡單的「緩存所有」頁面規則,並突然忽略源標題! – mahemoff

+0

不完全忽略。只是忽略了它們比你的計劃允許的程度要短。 –