正規表現なしでヘッダー値を分離する方法

Fastly では、正規表現なしでヘッダーのサブフィールド値を人間可読な方法で抽出することが可能です。「Headers subfields」は、value1=123value123; testValue=asdf_true; staff_user=true;max-age=0, surrogate-control=3600 に類似したボディシンタックススタイルを含むヘッダーです。これには Cookie、Set-Cookie、Cache-Control、やカスタムヘッダーなどが含まれます。Fastly では、以下のシンタックスでキー値を分離することができます。

1
req.http.Header-Name:key-name

例えば、クライアントからの Cookie リクエストが value1=123value123; testValue=asdf_true; staff_user=true; の場合、以下のロジックで staff_user の値を分離することができます。

1
set req.http.Staff-User = req.http.Cookie:staff_user;

サブフィールド関数を使用することで、同じことが実現できます。

1
set req.http.Staff-User = subfield(req.http.Cookie, "staff_user", ";");

VCL スニペットを使用するか、カスタムヘッダーを使用してこのロジックを追加できます。

VCL スニペットの使用

req.http.Cookie 内の staff_user 値に基づき、VCL スニペット を使用してこのロジックを実行するには、以下の手順に従ってください。

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

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

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

    1
    2
    3
    4
    5
    
    # in vcl_recv
    if (req.http.Cookie:staff_user ~ "true") {
      # some logic goes here
      return(pass);
    }
    
  10. Create をクリックすると、スニペットが作成されます。
  11. Activate ボタンをクリックして設定変更をデプロイします。

カスタムヘッダーの使用

req.http.staff_user ヘッダーへ Cookie から staff_user 値を分離するには、以下の設定でカスタムヘッダーを作成します。

正規表現を含まないカスタムヘッダーを表示するヘッダーのウィンドウ

以下の要領で Create a header ページの各フィールドに入力します。

  • Name フィールドに Staff User Header と入力します。
  • Type メニューから Request を選択し、Action メニューから Set を選択します。
  • Destination フィールドに http.staff_user を入力します。
  • Source フィールドに req.http.Cookie:staff_user と入力します。
  • Ignore if set メニューから No を選択します。
  • Priority フィールドに 10 と入力します。

これにより、各インバウンドリクエストで staff_user ヘッダーが送信されます。

Back to Top