正規表現なしでヘッダー値を分離する方法
最終更新日 2020-09-24
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 スニペットを使用するか、カスタムヘッダーを使用してこのロジックを追加できます。
subfield関数と :
アクセサは、Set-Cookie
ヘッダーにて使用することはできません。
VCL スニペットの使用
req.http.Cookie
内の staff_user
値に基づき、VCL スニペット を使用してこのロジックを実行するには、以下の手順に従ってください。
- Fastly コントロールパネルにログインします。
- Home ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
- Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
- VCL Snippets のリンクをクリックします。VCL Snippets ページが表示されます。
-
Create Snippet をクリックします。Create a VCL snippet ページが表示されます。
- Name フィールドに適切な名前を入力します (例:
Staff User Cookie
)。 - Type セクションで within subroutine を選択します。
- Select subroutine メニューから、recv (vcl_recv) を選択します。
-
VCL フィールドに以下の条件を追加します。
1 2 3 4 5
# in vcl_recv if (req.http.Cookie:staff_user ~ "true") { # some logic goes here return(pass); }
- Create をクリックすると、スニペットが作成されます。
- 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
ヘッダーが送信されます。
Attach a condition
リンクを使用することで、必要な場合のみにこのヘッダーを作成することができます。詳しくは、条件の使用ドキュメントをご覧ください。