هدر Vary در پروتکل HTTP همواره به دلیل پیچیدگی و عدم سازگاری مناسب بین واسطهها (Intermediaries)، یکی از چالشبرانگیزترین بخشهای این پروتکل شناخته شده است. با این حال، این هدر برای مدیریت سناریوهایی که در آن یک URL واحد باید پاسخهای متفاوتی (مانند فرمتهای مختلف تصویر یا زبانهای مختلف) بر اساس درخواست کاربر ارسال کند، ضروری است.
چالش اصلی هدر Vary و اثر آن بر Cache Hit Ratio
مشکل اصلی Vary این است که به کش میگوید کدام فیلدهای درخواست ممکن است بر پاسخ اثر بگذارند، اما مشخص نمیکند کدام تفاوتها واقعاً «معنادار» هستند. برای مثال، اگر دو کاربر درخواست زبان انگلیسی را با ترتیب متفاوتی در هدر Accept-Language ارسال کنند، یک سیستم کش ساده آنها را دو درخواست متفاوت میبیند و دو نسخه مجزا در حافظه ذخیره میکند، در حالی که هر دو کاربر باید یک پاسخ یکسان (زبان انگلیسی) دریافت کنند.
این مسئله منجر به پدیدهای میشود که در آن کش بهطور فنی درست عمل میکند اما عملاً «سرد» (Cold) میماند؛ زیرا تعداد نسخههای ذخیره شده (Variants) به دلیل تفاوتهای جزئی در هدرها (مانند فاصله یا ترتیب کلمات) بیش از حد زیاد شده و باعث کاهش شدید Cache Hit Ratio و افزایش فشار بر سرور Origin میشود.
راهکار جدید Cloudflare در Cache Rules
اکنون Cloudflare امکان مدیریت هوشمند Vary را در بخش Cache Rules برای تمامی پلنها فراهم کرده است. در این مدل، سرور Origin همچنان تعیین میکند چه هدرهایی باعث تغییر پاسخ میشوند، اما مدیر سیستم تصمیم میگیرد که Cloudflare چگونه با این تغییرات برخورد کند. سه استراتژی اصلی برای مدیریت این هدرها تعریف شده است:
- Normalize: این گزینه توصیهشده برای هدرهای مذاکره (Negotiation Headers) است. Cloudflare مقادیر هدرهایی مانند
Accept،Accept-LanguageوAccept-Encodingرا استانداردسازی میکند (مثلاً تبدیل به حروف کوچک و مرتبسازی بر اساس کیفیت یا q-value). این کار باعث میشود درخواستهای مشابه، از یک نسخه کششده مشترک استفاده کنند. - Passthrough: در این حالت، بایتهای خام هدر برای تطبیق با کش استفاده میشوند. این گزینه برای مواردی که تفاوتهای جزئی (مانند حروف بزرگ و کوچک یا ترتیب) واقعاً باعث تغییر در پاسخ سرور میشوند، کاربرد دارد.
- Bypass: اگر هدر مورد نظر دارای مقادیر بسیار متنوع یا شخصیسازی شده باشد (مانند
CookieیاUser-Agent)، پاسخ ذخیره نمیشود تا از پر شدن بیمورد حافظه کش جلوگیری شود.
تفاوت Vary با Custom Cache Key
ممکن است این سوال پیش بیاید که چرا از Custom Cache Key استفاده نکنیم؟ تفاوت در این است که Custom Cache Key یک ویژگی «درخواست-محور» (Request-driven) است و ابعاد تعریف شده را به تمام پاسخها تحمیل میکند. در مقابل، Vary یک ویژگی «پاسخ-محور» (Response-driven) است؛ یعنی تنها زمانی که سرور Origin در پاسخ خود هدر Vary را ارسال کند، این منطق فعال میشود.
نکات پیادهسازی برای مهندسین امنیت و شبکه
برای بهرهبرداری بهینه از این قابلیت، توجه به موارد زیر ضروری است:
- ثبات در Origin: سرور Origin باید برای تمامی پاسخهای قابل کش (حتی خطاها)، هدر Vary را بهطور سازگار ارسال کند تا از ذخیرهسازی اشتباه پاسخها جلوگیری شود.
- مدیریت Vary: *: هرگاه مقدار هدر
Vary: *باشد، Cloudflare بهطور خودکار کش را Bypass میکند، زیرا این مقدار به معنای آن است که هر جنبهای از درخواست (حتی IP کاربر) میتواند پاسخ را تغییر دهد. - پاکسازی (Purge): هرگونه عملیات Purge روی یک منبع، تمامی Variantهای مربوط به Vary آن منبع را نیز پاک میکند.