Edge-Control ヘッダーのサポート

VCL を使用して、オリジンからの Edge-Control レスポンスヘッダーフィールド内の情報にアクセスすることができます。これをサポートするため、Edge-Control の cache-maxage を Fastly エッジ上のオブジェクトの有効期限 (TTL) として適用し、Edge-Control の downstream-ttl を Fastly エッジからエンドユーザーのブラウザに渡される TTL として適用しています。

この Edge-Control ヘッダーのサポートを組み込むには、以下のように VCL スニペットを使用して、vcl_fetch を更新します。

  1. Fastly コントロールパネルにログインします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. VCL Snippets のリンクをクリックします。VCL Snippets ページが表示されます。
  5. Create Snippet をクリックします。Create a VCL snippet ページが表示されます。

    vcl スニペットのウィンドウ

  6. Name フィールドに適切な名前を入力します (例: Edge-Control Header parse_time_delta)。
  7. Type のセクションで within subroutine を選択します。
  8. Select subroutine メニューから fetch (vcl_fetch) を選択します。
  9. VCL フィールドに、以下の条件を追加します。

    1
    2
    3
    
    if (parse_time_delta(beresp.http.Edge-Control:cache-maxage) >= 0) {
      set beresp.ttl = parse_time_delta(beresp.http.Edge-Control:cache-maxage);
    }
    
  10. VCL Snippets のリンクをクリックします。VCL Snippets ページが表示されます。
  11. Create Snippet をクリックします。Create a VCL snippet ページが表示されます。

    vcl snippet window

  12. Name フィールドに適切な名前を入力します (例: Edge-Control Header downstream-ttl handling)。
  13. Type のセクションで within subroutine を選択します。
  14. Select subroutine メニューから deliver (vcl_deliver) を選択します。
  15. VCL フィールドに、以下の条件を追加します。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    if (fastly.ff.visits_this_service == 0) {
      if (resp.http.Edge-Control:downstream-ttl == "-1") {
        set resp.http.Cache-Control =  "no-cache, no-store, must-revalidate, proxy-revalidate, private, max-age=0, s-maxage=0";
        set resp.http.Expires = "1970-01-01 00:00:00";
      } else if (parse_time_delta(resp.http.Edge-Control:downstream-ttl) >= 0) {
        set resp.http.Cache-Control:max-age = parse_time_delta(resp.http.Edge-Control:downstream-ttl);
      }
      unset resp.http.Edge-Control;
    }
    
  16. Create をクリックすると、スニペットが作成されます。
  17. Activate ボタンをクリックして設定変更をデプロイします。

サブフィールド関数は Edge-Control フィールドを解析してサブフィールドを探し、parse_time_delta の関数は「7m」などの時間値を秒数に変換します。次に、その秒数を beresp.ttl (Fastly エッジ上のオブジェクトの TTL) に設定したり、ダウンストリームの Cache-Control ヘッダーフィールドを作成するために使用することができます。parse_time_delta の関数は、サブフィールドが時間値として適切に形成されていない場合や、全く存在しない場合に-1を返します。上記のスニペットでは Edge-Control の cache-maxagedownstream-ttl が存在し、使用可能であればそれを適用します。

Back to Top