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. Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインでの検索が行えます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. VCL スニペットのリンクをクリックします。VCL スニペットのページが表示されます。
  5. Create Snippet をクリックします。Create a VCL スニペットページが表示されます。

    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. Create をクリックしてスニペットを作成します。
  11. Create Snippet をクリックします。Create a VCL スニペットページが表示されます。

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

  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