Cloudflareは、グローバルエッジネットワークでHTTP Varyレスポンスヘッダーのネイティブサポートをリリースし、すべての顧客プランのキャッシュルールでこの機能を利用できるようにしました。この機能強化により、オリジンサーバーはローカライズされたテキスト、最新の画像エンコーディング、代替ペイロードなどの表現をネゴシエートできるようになり、プラットフォームオペレーターには深刻なキャッシュの断片化を防ぐためのきめ細かい制御が提供されます。
歴史的に、コンテンツ配信中間ネットワークは HTTP Vary ヘッダーを慎重に扱ってきました。標準の HTTP セマンティクスに従って、Vary 応答ヘッダーは、オリジン サーバーが応答を生成する前に特定の要求ヘッダーを評価したことをダウンストリーム キャッシュに示します。キャッシュが変換せずに Varia を尊重する場合、空白、大文字の使用、クライアントの優先言語の優先順位の違いなど、クライアント ヘッダーのわずかな構文の違いにより、単一のリソースが数十の異なるバリアントに分割される可能性があります。 Cloudflareは、約50,000の上位ドメインにわたる1億2,000万件を超えるHTTP応答の実証的監査で、約3,000のオリジンが4つ以上のリクエストヘッダーにわたって変化し、極端なケースでは数十の異なるフィールドにわたって変化することを発見しました。
ヘッダーの変化が制御されていないと、キャッシュの混乱が頻繁に発生し、ヒット率が低下し、オリジンの負荷が増加します。公平性とキャッシュ効率の間のこの緊張を緩和するために、Cloudflareはネゴシエーションプロセスを2つの運用ステップに分離しました。オリジンサーバーは、どのリクエストヘッダーがレスポンスの生成に影響を与えるかを引き続き指定しますが、Cloudflareキャッシュルールは、エッジがバリアントキーを計算する前にそれらのヘッダーの値をどのように処理、正規化、または無視するかを決定します。

キャッシュ ルールでその他の処理を構成する場合、オペレーターはヘッダーの動作を定義したり、リストにないフィールドにフォールバック ポリシーを適用したりできます。このエンジンは、正規化、パス、バイパスという 3 つの異なるアクションを公開します。正規化により、Accept や Accept-Language などの複雑なネゴシエーション ヘッダーが標準化された同等のクラスに正規化され、偶発的なクライアントの違いが排除されます。このパスには、大文字と小文字を区別する正確な文字列が保存されます。これは、ネイティブ アプリケーションがシンボルの正確な一致に依存する場合に必要です。[バイパス]は、揮発性ヘッダーまたは高カーディナリティ ヘッダーに一致するリクエストのエッジ キャッシュを完全にバイパスし、非決定的なバリアントがエッジ キャッシュ容量を消費しないようにします。
マルチ表現エンドポイントを提供するオリジンサーバーは、標準ヘッダーを使用して動的依存関係をアドバタイズできます。
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: public, max-age=3600
Vary: Accept, Accept-Language
エンジニアは、Cloudflareルールセットエンジンまたはダッシュボードを使用して、これらのリクエストに対応し、ヘッダーの変動性を管理するようにCloudflareを構成します。次の JSON 構成は、未知のバリアントのパススルーを指示しながら、コンテンツ ネゴシエーションの正規化を指定するキャッシュ ルールを示しています。
{
"expression": "(http.request.uri.path eq \"/api/catalog\")",
"action": "set_cache_settings",
"action_parameters": {
"cache": true,
"vary": {
"headers": [
{
"name": "accept",
"action": "normalize"
},
{
"name": "accept-language",
"action": "normalize"
}
],
"default_action": "pass_through"
}
}
}
Cloudflareは内部的に、スキーム、ホスト、パスで構成されるベースキャッシュキーとともに、オリジンによってアドバタイズされたその他のフィールドを記録します。後続の受信リクエストでは、最初に主キーの検索が実行されます。そのキーにバリアントが登録されている場合、エッジは対応するリクエスト ヘッダーを抽出し、指定されたキャッシュ ルール アクションに対してそれらを評価し、一致するバリアントを提供します。正規化された基準に一致するキャッシュされたバリアントがない場合、リクエストはオリジンに転送され、結果のペイロードがバリアント プールにインデックス付けされます。
プロダクト マネージャーの Alex Krivit 氏とシステム エンジニアの Zaidoon Abd Al Hadi 氏は、この 2 段階のアーキテクチャが手動ソリューションの長年の限界を解決すると指摘しました。以前は、チームはキャッシュをオフにするか、専門の Cloudflare ワーカーに依存するか、元の応答を確認する前にヘッダーを予期する脆弱なカスタム キャッシュ キーを維持するか、Vary for Images のような特殊な拡張機能を使用するかを選択する必要がありました。カスタム キャッシュ キーは、受信リクエストに対して事前にルールを評価します。つまり、オリジンが静的で不変の応答を返した場合でもルールが適用されます。対照的に、キャッシュ ルールの Vary ルールは、オリジンに Vary ヘッダーが含まれる場合にのみ動的に起動され、非変数応答に対するキー スペースの不必要な拡張を回避します。

新しいメカニズムにより、コンテンツ ネゴシエーションの実装頻度が減りますが、オペレーターは、高エントロピー ヘッダーでフル トラバーサル モードを有効にする前に、キャッシュ キーのカーディナリティを評価する必要があります。任意のトークンまたはセッション ID を含むヘッダーが渡されると、個別のクライアント文字列ごとに分離されたエッジ エントリが作成され、キャッシュの有効期間が短縮され、キャッシュ フラッシュ レートが増加します。キャッシュ ルールの変更サポートは現在、すべての Free、Pro、Business、および Enterprise ゾーンで有効です。