簡體   English   中英

告訴CloudFront僅緩存200個響應代碼

[英]Tell CloudFront to only cache 200 response codes

是否可以將Amazon CloudFront配置為僅緩存200個代碼? 我希望它永遠不會緩存3xx,因為我想將它連接到一個動態圖像處理工具,Lambda通過S3執行307,如描述https://aws.amazon.com/blogs/compute/resize-images-在即時與-亞馬遜S3-AWS-λ-和亞馬遜API網關/

除非您可以配置源以相應地設置Cache-Control標頭,否則無法明確告知CloudFront僅緩存2XX而不緩存3XX - CloudFront將2XX和3XX視為“成功”並將它們視為相同。 (它僅對4XX和5XX有不同的規則,對條件請求的304響應有明顯的例外。)

在S3重定向的情況下,問題在於S3重定向規則不允許設置Cache-Control標頭。

但是,如果您正在設置Cache-Control正確的對象標題,當你在S3創建它們-因為你應該-那么你可以probably¹依靠CloudFront的的Default TTL設置完全解決問題,告訴CloudFront的是響應缺少Cache-Control標頭不應該被緩存。 這意味着將Default TTL設置為0,並且當然要求Minimum TTL也設置為0,因為最小<= default是必需的。

Maximum TTL應保留其默認值,因為它用於縮短 max-age大於Maximum TTL對象的CloudFront緩存時間。 您可能不希望縮短2XX響應的可緩存性。

假設瀏覽器行為正常並且沒有緩存重定向(對於307或302它們不應該這樣),那么您的問題就會得到解決,因為CloudFront在此配置中的行為與預期相同 - 當Cache-Control時,它會表現出來,而不是緩存當它不存在時的回答。

但是,如果您發現瀏覽器或其他下游緩存持有您的重定向,您可能必須更積極。

在原點不提供響應時,將Cache-Control (或其他標題)顯式添加到響應的唯一方法是使用Lambda @ Edge。 以下代碼用作OriginResase²觸發器,可以為從源服務器接收的任何3XX HTTP響應添加Cache-Control: no-cache, no-store, private (是的,它有點冗余)。 如果原始響應中存在任何Cache-Control標頭,則它將被覆蓋。 任何其他響應(例如2XX)都不會被修改。

'use strict';

// add Cache-Control: no-cache, ... only if response status code is 3XX

exports.handler = (event, context, callback) => {
    const response = event.Records[0].cf.response;

    if (response.status.match(/^30[27]/))
    {
        response.headers['cache-control'] = [{ 
          key:   'Cache-Control', 
          value: 'no-cache, no-store, private' 
        }];
    }

    callback(null, response);
};

有了這個觸發器,2XX響應沒有修改其標題,但302/307響應將被修改,如圖所示。 這將告訴CloudFront和瀏覽器不要緩存響應。


¹ 可能 ......並不意味着CloudFront 可能只是做正確的事情。 CloudFront的行為完全符合預期。 大概是指這個是唯一需要的行動:你也許可以考慮這種解決方案足夠了,因為很可能瀏覽器將不緩存重定向。 像往常一樣,瀏覽器行為是通配符,可能需要更積極地添加顯式Cache-Control標頭以防止瀏覽器緩存重定向。

² 地響應觸發檢查並可以修改他們緩存之前(如果它們被緩存),並返回給瀏覽器的響應某些方面。 在流中的此處修改或添加Cache-Control標頭將阻止響應存儲在CloudFront緩存中,並且還應阻止瀏覽器緩存。

如果查看CloudFront分發錯誤頁面選項卡,則可以配置狀態代碼緩存

您可以在用例中忽略響應頁面路徑和HTTP響應代碼。

接下來,關於CloudFront行為如果要從源中每次檢索,請確保緩存為零。

如果使用標頭,請確保Origin Cache-Control Headers具有正確的緩存標頭值。

在此輸入圖像描述

暫無
暫無

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

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