ناکارسازی پاسخ‌های ذخیره‌شده در HTTP

http caching invalidating stored responses rfc 9111
20 آبان 1403

در وب‌گردی‌های روزانه ما، ممکن است بارها با این مسأله مواجه شده باشید که محتوای سایت‌ها به درستی به‌روز نمی‌شود یا تغییرات جدید نمایش داده نمی‌شوند. دلیل چنین اتفاقاتی معمولاً به خاطر وجود مکانیسم‌های ذخیره‌سازی یا کشینگ (Caching) است. کشینگ باعث می‌شود محتوای وب‌سایت‌ها سریع‌تر بارگیری شود، چرا که مرورگر به جای درخواست مجدد برای هر فایل، آنها را ذخیره می‌کند. با این حال، در برخی مواقع ممکن است نیاز به ناکارسازی پاسخ‌های ذخیره شده داشته باشیم.

ناکارسازی پاسخ‌های ذخیره‌شده در HTTP اساساً به این مفهوم اشاره دارد که محتوای قدیمی موجود در کش، دیگر معتبر نیست و باید محتوای جدیدی جایگزین آن شود. معمولاً با استفاده از دستورالعمل‌های HTTP مانند headers خاصی این کار انجام می‌پذیرد.

هنگام ناکارسازی، ما معمولاً به این فکر می‌کنیم که چگونه می‌توانیم به نوعی این پیام را به مرورگر بفرستیم که "این نسخه‌ای که داری، دیگه به درد نمی‌خوره، لطفا برو و نسخه جدیدش رو بگیر!"

مثلاً یکی از راه‌های رایج استفاده از هدرهای خاصی مانند Cache-Control است. ما می‌توانیم با تنظیم این هدر روی no-cache یا no-store، مرورگر را مجبور به بررسی اعتبار اطلاعات فعلی کنیم.

کد نمونه

Cache-Control: no-cache\r\nCache-Control: no-store\r\nETag: "abc123"\r\nIf-None-Match: "xyz789"\r\n

توضیح خط به خط کد

Cache-Control: no-cache
این خط به مرورگر می‌گوید که قبل از استفاده از نسخه کش شده، به سرور مراجعه کند تا بررسی کند نسخه جدیدتری از محتوا وجود دارد یا نه.
Cache-Control: no-store
به مرورگر دستور داده می‌شود که هیچ‌گونه اطلاعاتی را در کش ذخیره نکند.
ETag: "abc123"
یک شناسه یکتا (Etiquette Tag) به محتوای ارسال شده اختصاص می‌دهد، که برای مقایسه محتوای فعلی با محتوای ذخیره شده استفاده خواهد شد.
If-None-Match: "xyz789"
این دستور به سرور می‌گوید که فقط در صورتی محتوا را برگرداند که شناسه آن با شناسه ذخیره شده متفاوت باشد.

سوالات متداول

؟

چگونه می‌توان از به‌روزرسانی محتوای کش شده مطمئن شد؟

؟

هدر If-None-Match چه نقشی در ناکارسازی کش دارد؟