کلودفلر Vary رو به Cache Rules آورد
خلاصهٔ کاملتر
هدر Vary یه هدر استاندارد پاسخه که به کشهای میانی میگه کدوم فیلدهای درخواست ممکنه جواب سرور رو عوض کنن. یه URL میتونه چند جواب درست داشته باشه، مثل همون /catalog که برای مرورگر HTML و برای کلاینت API جواب JSON برمیگردونه. بدون Vary هر جوابی که اول تو کش بشینه به هر دو تا میرسه و یکی از اون دو تا جواب اشتباه میگیره. پس این مشکل حل میشه، ولی یه مشکل سختتر تازه شروع میشه.
مشکل دوم اینه که Vary نمیگه کدوم تفاوت واقعاً مهمه. این دو درخواست هر دو انگلیسی میخوان و مبدأ برای جفتشون یه جواب میده، ولی کشی که بایت خام رو مقایسه میکنه نمیتونه مطمئن بشه یکیان:
Accept-Language: en-US, fr;q=0.8
Accept-Language: fr;q=0.8, en-GBنتیجهش یه کش کاملاً درسته که تقریباً همیشه سرد میمونه. ده مقدار روی سه فیلد میتونه هزار ترکیب بسازه، و User-Agent و کوکی تنوعشون از این هم خیلی بیشتره. تحلیلی روی بیش از ۱۲۰ میلیون پاسخ از نزدیک ۵۰ هزار سایت پرطرفدار نشون داده حدود ۳ هزار سایت روی چهار فیلد یا بیشتر Vary میذارن و بعضیهاشون روی ۱۰، ۲۳ و حتی ۴۷ فیلد. اونوقت جوابهای کاملاً یکسان بین کلی ورودی کمترافیک پخش میشن و همدیگه رو از کش بیرون میندازن.
کاری که Cache Rules میکنه اینه که تصمیم رو دو تیکه میکنه: مبدأ با Vary اسم هدرها رو اعلام میکنه و تو تعیین میکنی کلودفلر با مقدار هرکدوم چیکار کنه. اکشن normalize مقدارها رو قبل از انتخاب واریانت یکدست میکنه، حروف رو کوچیک میکنه و بر اساس quality value مرتب میکنه، پس ترتیب کلاینت دیگه روی کلید کش اثر نداره. همون دو تا Accept-Language بالا با تنظیم زبانهای en و fr و de جفتشون به en,fr میرسن و یه جواب مشترک میگیرن.
اکشن passthrough بایت خام رو ملاک میگیره، پس حتی فرق حروف بزرگ و فاصله هم کلید جدا میسازه؛ مناسب هدرهایی که مقدارهاشون محدوده و دقیقاً جواب رو عوض میکنن. bypass هم یعنی وقتی مبدأ اون هدر رو تو Vary بیاره، جواب اصلاً ذخیره نمیشه، که جای Cookie و User-Agent ـه. کلودفلر normalize رو به عنوان نقطهٔ شروع پیشنهاد میده. این قابلیت از همین حالا روی پلنهای Free تا Enterprise و از طریق داشبورد، Rulesets API و Terraform در دسترسه.
نکات کلیدی:
- پشتیبانی از Vary در Cache Rules روی همهٔ پلنها (Free، Pro، Business، Enterprise) فعاله.
- سه اکشن normalize، passthrough و bypass تعیین میکنن مقدار هر هدر چطور وارد کلید کش بشه؛ پیشنهاد پیشفرض normalize ـه.
- Vary: * همیشه کش رو دور میزنه، چون حتی چیزی بیرون از پیام HTTP مثل IP کلاینت هم میتونه جواب رو عوض کنه.
- کلودفلر مقدار نرمالشدهٔ Accept و Accept-Language رو به مبدأ هم فوروارد میکنه تا انتخاب سرور با تطبیق کش یکی بمونه.
- عوض کردن تنظیمات Vary کش قبلی رو پاک نمیکنه؛ ورودیهای قدیمی تا انقضا یا purge سر جاشون میمونن.




