簡體   English   中英

無法讓 CloudFront 提供緩存控制標頭

[英]Can't make CloudFront supply cache-control headers

我已經對此進行了大量閱讀,但我所看到的解決方案似乎都不適用於 IIS 網站 - 大多數似乎建議了一些服務器端解決方案,但沒有一個對我有用。

我正在優化我們的一個網站,PageSpeed、YSlow 和 Lighthouse 都抱怨我從 CloudFront CDN 提供的圖像沒有任何緩存標頭。 CDN 從 S3 存儲桶提供服務。

例如https://static.edie.net/webimages/new_new_new.png (未指定到期時間)

出現“有沒有遠期到期日期的靜態組件”和“利用瀏覽器緩存以獲取以下可緩存資源”

我一生都無法弄清楚如何讓 CloudFront 為這樣的圖像提供緩存標頭。

我已經設定

Cache-Control: max-age=5500000 

在 s3 存儲桶/文件本身上,如果您通過存儲桶檢查文件: https : //devedienet.s3.amazonaws.com/webimages/new_new.png那么它存在緩存標頭。

但這似乎不會影響 CloudFront 圖像,它只有這些標頭:

Age: 12153
Connection: keep-alive
Date: Mon, 22 Oct 2018 11:18:49 GMT
ETag: "940fd4d68428cf3e4f88a45aab4d7157"
Server: AmazonS3
Via: 1.1 4f95eb10423b781564e79d7c85f85795.cloudfront.net (CloudFront)
X-Amz-Cf-Id: TZAWy8U12-ohhe-dwTkCLqXHbJKI7CJqQd21I-lvq-8rloZjTew6aw==
x-amz-meta-s3b-last-modified: 20181017T105350Z
X-Cache: Hit from cloudfront

我已經嘗試將自定義行為添加到 CloudFront 分配的 AWS 控制面板中:

webimages/*.png
Minimum TTL: 5500000

但這又似乎沒有效果。

請注意,在添加上面的新規則后,我使文件夾中的所有圖像無效,但沒有骰子。

我是否遺漏了什么或誤解了需要什么?

由於您通過 cloudfront 從 S3 提供內容,因此您需要在將文件上傳到 S3 時將以下標頭添加到 S3 中的對象。 到期時間:{未來某個日期}

獎勵:您無需為每個對象單獨指定此標頭。 您可以在S3上一起上傳一堆文件,單擊下一步,然后在詢問S3存儲類別的屏幕上,向下滾動並添加這些標題。 並且不要忘記點擊保存!

在此處輸入圖片說明

我遇到了類似的問題,因此在進行了一些閱讀和試驗后,我發現 Cloudfront 的最小 TTL、最大 TTL、默認 TTL 的對象緩存值沒有在資源的響應標頭中明確添加緩存控制標頭如果資源在服務器級別沒有一個。 其次,即使資源在 S3 中添加了MinTTL < s3 Cache < Max TTL控制元數據,它也應該介於MinTTL < s3 Cache < Max TTL 對象緩存值指出,對於提供的值,資源將在邊緣位置緩存那么長時間,並且不會在資源的響應標頭中添加緩存控制。 我所做的是創建一個 Lambda 函數,並通過更新查看器響應的緩存行為設置將其添加到 Lambda 關聯下。 這是我的 Lambda fn。 這在請求的資源中添加了 Cache-Control 標頭。

'use strict';

exports.handler = (event, context, callback) => {
    const response = event.Records[0].cf.response;
    const headers = response.headers;
    
const headerCache = 'Cache-Control';


headers[headerCache.toLowerCase()] = [{
    key: headerCache,
    value: 'max-age=1096000'
}];

callback(null, response);

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM