レスポンス Cookie の取り扱いについて

VCL でレスポンス Cookie を読み取る従来の方法では、beresp.http.Set-Cookie または resp.http.Set-Cookie の変数を調べ、正規表現を使用して値が抽出されます。しかし、複雑な文字列や引用符付きの文字列を正規表現で解析するのは不安定で、エッジケースによって失敗しやすいため、これは理想的な方法ではありません。また、オリジンが複数の Set-Cookie ヘッダーを送信する場合のように、同じ名前を持つ複数のヘッダーを読み取ることができません。これら2つの理由から、Fastly では ヘッダーの数にかかわらず、Set-Cookie へッダーから名前付きの値を抽出する方法をサポートしています。

名前付きの値にアクセスするには、リクエストのどの部分かに応じて、beresp または resp を持つ関数を使用します。

setcookie.get_value_by_name(beresp, "name")

or

setcookie.get_value_by_name(resp, "name")

"name" は値の名前に置き換えます。例えば、以下のようなオリジンからの HTTP レスポンスがあるとします。

HTTP/1.1 200 OK
Cache-Control: max-age=60
Content-Type: text/html; charset=utf-8
Content-Length: 80806
Accept-Ranges: bytes
Date: Tue, 11 Aug 2015 19:00:04 GMT
Age: 123
Connection: keep-alive
Set-Cookie: one=a; httponly; secure
Set-Cookie: two=b or not to b; httponly

そこで、以下のような関数を使用します。

set resp.http.X-One = setcookie.get_value_by_name(resp, "one");
set resp.http.X-Two = setcookie.get_value_by_name(resp, "two");

resp.http.X-One が「a」に、resp.http.X-Two が「b or not to b」に設定されます。

このロジックは、アップロードされたカスタム VCL だけでなく、コントロールパネル全体で使用することができます。例:

コントロールパネルを使用してヘッダー経由で設定されたレスポンス Cookie ロジックの例


翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。