هنگامی که کاربر از صفحه وب بازدید می کند، محتویات آن صفحه می تواند در حافظه کش مرورگر ذخیره شود، بنابراین نیازی به درخواست مجدد و بارگیری مجدد نیست. استفاده موثر از حافظه پنهان مرورگر می تواند زمان پاسخگویی کاربر نهایی را افزایش داده و از پهنای باند او کمتر استفاده کند.
قابلیت ذخیره یک آیتم در مرورگر با موارد زیر تعیین می شود:
اگر آیتمی دارای حافظه کش در نظر گرفته شود، مرورگر درصورت “تازه بودن”، آن را از حافظه کش بازیابی می کند. تازه بودن توسط این معیار ها مشخص می شود:
اگر نمایشی قدیمی است یا تاریخ انقضا معتبری ندارد، مرورگر از وب سرور مبدأ درخواست می کند تا محتوا را تأیید کند تا بتواند کپی موجود را ارائه دهد. سپس وب سرور 304 را برمی گرداند تا به مرورگر اطلاع دهد که نسخه ذخیره شده محلی، هنوز هم برای استفاده خوب است. اگر محتوا تغییر کرده باشد، وب سرور یک کد پاسخ 200 را برمی گرداند و نسخه جدید را ارائه می دهد.
نحوه استفاده از حافظه کش مرورگر به سه مورد اصلی بستگی دارد:
کاربر می تواند پیکربندی کند که چگونه می خواهد محتوای ذخیره شده در حافظه کش محلی ذخیره و تحویل داده شود، یا اینکه آیا می خواهد محتوا به طور کلی ذخیره شود. Internet Explorer و Firefox این ها را کمی متفاوت طبقه بندی می کنند.
هنگامی که یک کاربر به صفحه ای که قبلاً بازدید شده بود باز می گردد، مرورگر با وب سرور مبدا بررسی می کند تا مشخص کند که آیا صفحه از آخرین بازدید تغییر کرده است یا خیر.
اگر صفحه ای در همان نشست مرورگر بازبینی شود، محتوا از حافظه کش تحویل داده می شود. وقتی مرورگر بسته می شود و سپس باز می شود، درخواست ارسال می شود تا بررسی شود که آیا محتوا تغییر کرده است یا خیر. اگر در همان نشست مرورگر از صفحه ای بازدید شود، از فایل های ذخیره شده به جای بارگیری محتوا از وب سرور اصلی استفاده می شود.
وقتی مرورگر بسته می شود و سپس در بازدید های مکرر باز می شود، از تنظیمات مادام العمر محتوای ذخیره شده استفاده می کند. اگر در یک نشست مرورگر از همان صفحه بازدید شود، از فایل های ذخیره شده استفاده می شود. این تنظیمات پیش فرض برای Internet Explorer و Firefox است.
مرورگر با وب سرور های اصلی برای محتوای جدیدتر بررسی نمی کند. این تنظیمات را می توان به روش های زیر برای IE و Firefox پیکربندی کرد:
علاوه بر پیکربندی تنظیمات عمومی حافظه کش، تنظیمات دیگری برای پیکربندی وجود دارد که کنترل می کند آیا محتوای SSL ذخیره می شود. هنگامی که این گزینه فعال است، هیچ محتوای SSL روی دیسک ذخیره نمی شود، این شامل تصاویر ایستا و شامل اجبار مرورگر به درخواست محتوا در هر بازدید از صفحه می شود. اینترنت اکسپلورر به طور پیش فرض این را غیرفعال کرده است، در حالی که Firefox آن را به طور پیش فرض فعال کرده است.
برای اینکه محتوا از حافظه کش ارائه شود، آدرس اینترنتی باید مطابقت دقیقی با محتوای موجود در حافظه کش داشته باشد. برخی از توسعه دهندگان وب اعداد تصادفی را به بخشی از رشته کوئری اضافه می کنند تا اطمینان حاصل شود که محتوا ذخیره نشده و همیشه “تازه” است. هنگامی که این رشته های جستجوی تصادفی به URL اضافه می شوند، مرورگر محتوا را مانند آیتمی که قبلا در حافظه کش بود، تشخیص نمی دهد و درخواست GET جدید برای عنصر صادر می شود.
در بیشتر موارد، رفتار حافظه کش محتوا توسط Cache-Control کنترل می شود و هدر های HTTP منقضی می شود. هدر های Cache-Control مشخص می کنند که آیا محتوا می تواند ذخیره شود یا نه و برای چه مدت. مقادیر می تواند شامل موارد زیر باشد:
افزودن فقط یک هدر بدون هدر Cache-Control نشان می دهد که محتوا می تواند توسط مرورگر ها و حافظه کش عمومی/به اشتراک گذاشته شده، ذخیره شود و پس از تاریخ و زمان مشخص شده مانند محتوای زیر قدیمی محسوب می شود:
(Status-Line) HTTP/1.1 200 OK
Content-Length 4722
Content-Type image/gif
Date Fri, 31 Aug 2007 10:20:29 GMT
Expires Sun, 17 Jan 2038 19:14:07 GMT
Last-Modified Wed, 07 Jun 2006 23:55:38 GMT
URL in cache? Yes
Expires 19:14:07 Sun, 17 Jan 2038 GMT
Last Modification 23:55:38 Wed, 07 Jun 2006 GMT
Last Cache Update 10:20:32 Friday, August 31, 2007 GMT
Last Access 10:20:31 Friday, August 31, 2007 GMT
ETag
Hit Count 1
اگر هیچ هدر Cache-Control یا Expires وجود نداشته باشد، مرورگر محتوا را بدون تاریخ انقضا مطابق محتوای زیر ذخیره می کند:
Headers:
(Status-Line) HTTP/1.1 200 OK
Accept-Ranges bytes
Connection Keep-Alive
Content-Length 221
Content-Type Image/gif
Date Fri, 31 Aug 2007 10:27:06 GMT
Last-Modified Fri, 02 Jun 2006 09:46:32 GMT
URL in cache? Yes
Expires (Not set)
Last Modification 09:46:32 Friday, June 02, 2006 GMT
Last Cache Update 10:26:32 Friday, August 31, 2007 GMT
Last Access 10:26:31 Friday, August 31, 2007 GMT
ETag
Hit Count 1
برخی از توسعه دهندگان وب برای کنترل نحوه ذخیره سازی محتوا در مقابل تنظیم پارامتر های حافظه کش در هدر های HTTP، از META Tags استفاده کرده اند. استفاده از هدر HTTP روش ترجیحی و توصیه شده برای کنترل رفتار حافظه کش است.
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT=" ">
چهار مقدار وجود دارد که می توان برای متغیر محتوا استفاده کرد:
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
پس از دریافت، مرورگر محتوا را به صورت محلی ذخیره نمی کند. این در واقع همان ارسال هدر Cache-Control = No-Cache است.
<META HTTP-EQUIV="REFRESH" CONTENT="15;URL=http://www.example.com/index.html">
می توان از عناصر رفرش استفاده کرد تا به مرورگر بگوید که کاربر را به صفحه دیگری هدایت کند یا بعد از مدت زمان مشخصی صفحه را تازه سازی کند. برچسب رفرش مانند ضربه زدن به دکمه Refresh در مرورگر عمل می کند. حتی اگر محتوا دارای تاریخ انقضای معتبری باشد، مرورگر از شما درخواست اعتبار سنجی می کند که از سرور مبدأ تغییر نکرده باشد. این امر اساساً هدف تعیین تاریخ انقضای محتوا را شکست می دهد.
اگر نشانی اینترنتی در برچسب META مشخص شده باشد، به مرورگر می گوید که پس از گذشت زمان به آدرس مشخص شده هدایت شود. هدایت مجدد کاربران از طریق برچسب META برعکس هدر HTTP-Response توصیه نمی شود، زیرا کاربر می تواند زیر تنظیمات امنیتی مرورگر، تازه سازی META را خاموش کند.
استفاده از نحوه بیرون کشیدن محتوا از حافظه کش در بازدید های مکرر، تحت تأثیر نحوه صدور درخواست قرار می گیرد.
در حالی که در همان نشست مرورگر هستید، تمام محتوای یک سایت از حافظه کش مرورگر محلی ارائه می شود. اگر کاربر روی صفحات متعدد یک برنامه کلیک کند و گرافیک و عناصر یکسانی در هر صفحه یافت شود، درخواست به وب سرور مبدا ارسال نمی شود. در عوض از حافظه کش محلی ارائه می شود.
اگر کاربر در آن نشست مجدداً از صفحه ای بازدید کند، تمام محتوا، از جمله HTML، از حافظه پنهان محلی بازیابی می شود، همانطور که در تصویر زیر نشان داده شده است (بسته به تنظیمات مرورگر). به محض بسته شدن مرورگر، حافظه cache ان نشست پاک می شود. برای نشست بعدی، تنها کشی که مورد استفاده قرار می گیرد حافظه کش دیسک است.
همچنین ممکن است کاربران برای بررسی محتویات جدید، مانند نمره ورزشی به روز شده یا مقاله خبری، روی refresh کلیک کنند. کلیک کردن روی تازه سازی منجر به ارسال یک هدر “If-None-Match” به وب سرور مبدا برای همه محتوای موجود در حافظه کش دیسک، مستقل از تاریخ انقضای محتوای ذخیره شده می شود. این یک کد پاسخ 304 برای هر مورد قابل استفاده مجدد است که در حال حاضر در حافظه پنهان مرورگر است، همانطور که در تصویر زیر نشان داده شده است.
با زدن CTRL و Refresh (فقط در اینترنت اکسپلورر) یا CTRL و F5 (اینترنت اکسپلورر و فایرفاکس) یک هدر “Cache-Control = no-cache” در درخواست وارد می شود و در نتیجه همه محتوا مستقیماً از سرور های مبدا ارائه می شود. بدون ارائه محتوا از حافظه پنهان مرورگر محلی. همه اشیاء دارای یک کد پاسخ 200 هستند که نشان می دهد همه به طور مستقیم از سرور ها مانند تصویر زیر ارائه شده اند.
اگر نشست جدیدی در مرورگر شروع شود و کاربر به سایتی مکررا مراجعه کند، از حافظه مرورگر محلی (بر اساس تنظیمات مرورگر) استفاده می شود. اگر تاریخ انقضا معتبری برای محتوای ذخیره شده وجود داشته باشد، مستقیماً از حافظه کش تحویل داده می شود و هیچ درخواستی برای وب سرور مبدا صادر نمی شود.
اگر محتوا تاریخ انقضای معتبری نداشته باشد، مرورگر سرصفحه “If-modified-since” یا “If-none-match” را در درخواست وارد می کند. اگر محتوا تغییر نکرده باشد، 304 از سرور بازگردانده می شود و محتوا از حافظه پنهان بازیابی می شود. از طرف دیگر اگر محتوا تغییر کرده باشد، سرور با 200 پاسخ می دهد و محتوا را به کاربر تحویل می دهد.
حذف نیاز مرورگر به بارگیری محتوا در بازدید های مکرر می تواند عملکرد برنامه های وب را تا حد زیادی بهبود بخشد. عوامل زیادی بر اینکه آیا می توان محتوا را از حافظه پنهان مرورگر محلی در بازدید های مکرر بازیابی کرد یا نه، تأثیر می گذارد، از جمله تنظیمات مرورگر، وب سایت و رفتار کاربر. BIG-IP WebAccelerator می تواند استفاده از حافظه پنهان کاربر را بدون نیاز به تغییر برنامه بهبود بخشد.
منبع: f5.com