תיעוד 99
אימות מחדש
Cloudflare מאמת מחדש תוכן שמור במטמון מול המקור אחרי שהתוכן פג תוקף. כדי לאמת מחדש תוכן שמור במטמון לפני שהוא פג תוקף, בטלו את תוקפו.
#stale-while-revalidate
כשנכס שמור במטמון פג תוקף, Cloudflare משתמש בהנחיה stale-while-revalidate ב-Cache-Control כדי לקבוע אם אפשר להמשיך להגיש את הנכס המיושן בזמן שליפת עותק טרי מהמקור. אם ההנחיה קיימת והנכס נמצא בתוך חלון ההתיישנות המותר, Cloudflare מגיש למבקרים את התוכן שפג תוקפו ומאמת מחדש ברקע. באמצעות כותרות כמו If-Modified-Since ו-ETag, Cloudflare מאמת את התוכן בלי לשלוף אותו מחדש במלואו, וכך מצמצם את התעבורה למקור.
#אימות מחדש אסינכרוני
אימות מחדש הוא אסינכרוני במלואו. כשנכס שמור במטמון פג תוקף ו-stale-while-revalidate מוגדר, הבקשה הראשונה שמגיעה אחרי פקיעת התוקף מפעילה אימות מחדש ברקע. הבקשה הזו מקבלת מיד תוכן מיושן עם סטטוס UPDATING במקום להמתין עד שהמקור מגיב. גם כל הבקשות שאחריה מקבלות תוכן מיושן עם סטטוס UPDATING עד שהמקור מגיב. אחרי שהאימות מחדש מסתיים, הבקשות הבאות מקבלות תוכן טרי עם סטטוס HIT.
אם התוכן המיושן עדיין תקף, Cloudflare קובע TTL חדש. אם התוכן השתנה, המקור מספק תוכן טרי שמחליף את הישן.
#שליטה בהתנהגות של תוכן מיושן
Cloudflare מגיש תוכן מיושן במהלך אימות מחדש רק אם המקור כולל את ההנחיה stale-while-revalidate בכותרת Cache-Control שלו. בלי ההנחיה הזו, המבקרים ממתינים לתגובת המקור לפני שהם מקבלים תוכן.
אם המקור מגדיר stale-while-revalidate ואתם רוצים לעקוף את זה, אפשר להשבית הגשת תוכן מיושן דרך ההגדרה Serve stale content while revalidating ב-Cache Rules.
#הנחיות שמבטלות את stale-while-revalidate
כש-Origin Cache Control מופעל, הנחיות Cache-Control הבאות מונעות מ-Cloudflare להגיש תוכן מיושן, לפי RFC 9111 §4.2.4 ↗︎:
must-revalidate: אוסר הגשת תוכן מיושן. המטמון חייב לאמת מחדש מול המקור תחילה.proxy-revalidate: כמוmust-revalidate, אבל חל רק על מטמונים משותפים (כמו Cloudflare).s-maxage: מרמז על הסמנטיקה שלproxy-revalidate, ולכן מטמונים משותפים לא יכולים להגיש תוכן מיושן.no-cache: דורש אימות מחדש לפני הגשת כל תגובה שמורה במטמון.
אם אחת מההנחיות האלה קיימת יחד עם stale-while-revalidate, Cloudflare לא יגיש תוכן מיושן. הבקשות יחזירו EXPIRED במקום UPDATING.
פתרון כשצריך TTL שונה לקצה ולדפדפנים
אם אתם צריכים התנהגות של stale-while-revalidate עם TTL שונה ל-Cloudflare מאשר לדפדפנים, אל תשתמשו ב-s-maxage. במקום זה, הגדירו את המקור כך שישלח max-age עם stale-while-revalidate, ואז השתמשו ב-Edge Cache TTL ב-Cache Rules כדי לקבוע TTL נפרד ל-Cloudflare.
לכל ההנחיות הזמינות, או להתנהגות כש-Origin Cache Control מושבת, ראו Cache-Control directives.
#אימות מחדש חכם כלפי משתמשים
כשכותרות Last-Modified ↗︎ ו-Etag ↗︎ חסרות בתגובת שרת המקור, Smart Edge Revalidation ישתמש בזמן שבו האובייקט נשמר במטמון ברשת הגלובלית של Cloudflare כערך כותרת Last-Modified. כשדפדפן שולח ל-Cloudflare בקשת אימות מחדש באמצעות If-Modified-Since או If-None-Match, הרשת הגלובלית שלנו יכולה לענות על שאלות האימות מחדש האלה באמצעות כותרת Last-Modified שנוצרה מ-Smart Edge Revalidation. כך הרשת הגלובלית שלנו יכולה להבטיח אימות מחדש יעיל גם אם הכותרות לא נשלחות מהמקור.