Web Design

فرآیند کش کردن توسط مرورگر ها چگونه است؟

هنگامی که کاربر از صفحه وب بازدید می کند، محتویات آن صفحه می تواند در حافظه کش مرورگر ذخیره شود، بنابراین نیازی به درخواست مجدد و بارگیری مجدد نیست. استفاده موثر از حافظه پنهان مرورگر می تواند زمان پاسخگویی کاربر نهایی را افزایش داده و از پهنای باند او کمتر استفاده کند.

قابلیت ذخیره یک آیتم در مرورگر با موارد زیر تعیین می شود:

  • هدر های ریسپانسیو که از وب سرور مبدا اطلاعات را دریافت می کنند، اگر این هدر ها نشان دهند که محتوا نباید ذخیره شود، بنابراین ذخیره نمی شود.
  • اعتبارسنجی مانند ETag یا هدر Last-Modified باید در پاسخ وجود داشته باشد.

اگر آیتمی دارای حافظه کش در نظر گرفته شود، مرورگر درصورت “تازه بودن”، آن را از حافظه کش بازیابی می کند. تازه بودن توسط این معیار ها مشخص می شود:

  • یک مدت انقضا معتبر که هنوز در زمان دوره تازگی آن آیتم است.
  • تنظیمات مرورگر همانطور که در زیر توضیح داده شده است.

اگر نمایشی قدیمی است یا تاریخ انقضا معتبری ندارد، مرورگر از وب سرور مبدأ درخواست می کند تا محتوا را تأیید کند تا بتواند کپی موجود را ارائه دهد. سپس وب سرور 304 را برمی گرداند تا به مرورگر اطلاع دهد که نسخه ذخیره شده محلی، هنوز هم برای استفاده خوب است. اگر محتوا تغییر کرده باشد، وب سرور یک کد پاسخ 200 را برمی گرداند و نسخه جدید را ارائه می دهد.

نحوه استفاده از حافظه کش مرورگر به سه مورد اصلی بستگی دارد:

  • تنظیمات مرورگر
  • وب سایت (کد HTML و هدر HTTP)
  • نحوه بارگذاری صفحه توسط کاربر

تنظیمات مرورگر

کاربر می تواند پیکربندی کند که چگونه می خواهد محتوای ذخیره شده در حافظه کش محلی ذخیره و تحویل داده شود، یا اینکه آیا می خواهد محتوا به طور کلی ذخیره شود. Internet Explorer و Firefox این ها را کمی متفاوت طبقه بندی می کنند.

هر بازدید/مشاهده از صفحه وب

هنگامی که یک کاربر به صفحه ای که قبلاً بازدید شده بود باز می گردد، مرورگر با وب سرور مبدا بررسی می کند تا مشخص کند که آیا صفحه از آخرین بازدید تغییر کرده است یا خیر.

هر بار که مرورگر را راه اندازی می کنیم/یک بار در هر نشست (session)

اگر صفحه ای در همان نشست مرورگر بازبینی شود، محتوا از حافظه کش تحویل داده می شود. وقتی مرورگر بسته می شود و سپس باز می شود، درخواست ارسال می شود تا بررسی شود که آیا محتوا تغییر کرده است یا خیر. اگر در همان نشست مرورگر از صفحه ای بازدید شود، از فایل های ذخیره شده به جای بارگیری محتوا از وب سرور اصلی استفاده می شود.

به صورت خودکار/هنگامی که صفحه قدیمی است

وقتی مرورگر بسته می شود و سپس در بازدید های مکرر باز می شود، از تنظیمات مادام العمر محتوای ذخیره شده استفاده می کند. اگر در یک نشست مرورگر از همان صفحه بازدید شود، از فایل های ذخیره شده استفاده می شود. این تنظیمات پیش فرض برای Internet Explorer و Firefox است.

هیچوقت

مرورگر با وب سرور های اصلی برای محتوای جدیدتر بررسی نمی کند. این تنظیمات را می توان به روش های زیر برای IE و Firefox پیکربندی کرد:

Internet Explorer

  • Tools را انتخاب کنید
  • Internet Options را انتخاب کنید
  • در IE 7 از تب General در زیر Browsing history تنظیمات را انتخاب کنید
  • در اینترنت اکسپلورر 5 یا 6 در بخش فایل های موقت اینترنت، روی تنظیمات کلیک کنید

Firefox

  • در مرورگر Firefox عبارت about:config را تایپ کنید
  • روی تنظیمات browser.cache.check_doc_frequency دوبار کلیک کنید
  • مقدار صحیح مورد نظر را در کادر وارد کنید
  • 0 = یکبار در هر نشست
  • 1 = هر بار که صفحه را مشاهده می کنیم
  • 3 = هنگامی که صفحه قدیمی است (به طور پیش فرض)
  • 2 = هرگز

علاوه بر پیکربندی تنظیمات عمومی حافظه کش، تنظیمات دیگری برای پیکربندی وجود دارد که کنترل می کند آیا محتوای SSL ذخیره می شود. هنگامی که این گزینه فعال است، هیچ محتوای SSL روی دیسک ذخیره نمی شود، این شامل تصاویر ایستا و شامل اجبار مرورگر به درخواست محتوا در هر بازدید از صفحه می شود. اینترنت اکسپلورر به طور پیش فرض این را غیرفعال کرده است، در حالی که Firefox آن را به طور پیش فرض فعال کرده است.


وب سایت

برای اینکه محتوا از حافظه کش ارائه شود، آدرس اینترنتی باید مطابقت دقیقی با محتوای موجود در حافظه کش داشته باشد. برخی از توسعه دهندگان وب اعداد تصادفی را به بخشی از رشته کوئری اضافه می کنند تا اطمینان حاصل شود که محتوا ذخیره نشده و همیشه “تازه” است. هنگامی که این رشته های جستجوی تصادفی به URL اضافه می شوند، مرورگر محتوا را مانند آیتمی که قبلا در حافظه کش بود، تشخیص نمی دهد و درخواست GET جدید برای عنصر صادر می شود.

در بیشتر موارد، رفتار حافظه کش محتوا توسط Cache-Control کنترل می شود و هدر های HTTP منقضی می شود. هدر های Cache-Control مشخص می کنند که آیا محتوا می تواند ذخیره شود یا نه و برای چه مدت. مقادیر می تواند شامل موارد زیر باشد:

  • no-cache: این محتوا را ذخیره نکنید
  • خصوصی: می تواند توسط مرورگر ها ذخیره شود، اما حافظه کش مشترک/عمومی نیست
  • max-age: تنظیم در ثانیه؛ تعیین می کند که حداکثر زمان محتوا به عنوان تازه در نظر گرفته شود

افزودن فقط یک هدر بدون هدر 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=" ">

چهار مقدار وجود دارد که می توان برای متغیر محتوا استفاده کرد:

  • خصوصی: فقط در حافظه کش خصوصی مانند مرورگر ذخیره می شود
  • عمومی: ممکن است در حافظه کش مشترک یا ذخیره سازی خصوصی ذخیره شود
  • No-Cache: محتوا را نمی توان ذخیره کرد
  • No-Store: محتوا را می توان ذخیره کرد اما بایگانی نمی شود. برای تعیین مدت زمان ذخیره سازی محتوا برچسب Expires باید همراه با برچسب های Cache-Control استفاده شود

غیر فعال کردن کش مرورگر

<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

با زدن CTRL و Refresh (فقط در اینترنت اکسپلورر) یا CTRL و F5 (اینترنت اکسپلورر و فایرفاکس) یک هدر “Cache-Control = no-cache” در درخواست وارد می شود و در نتیجه همه محتوا مستقیماً از سرور های مبدا ارائه می شود. بدون ارائه محتوا از حافظه پنهان مرورگر محلی. همه اشیاء دارای یک کد پاسخ 200 هستند که نشان می دهد همه به طور مستقیم از سرور ها مانند تصویر زیر ارائه شده اند.

نشست جدید مرورگر

اگر نشست جدیدی در مرورگر شروع شود و کاربر به سایتی مکررا مراجعه کند، از حافظه مرورگر محلی (بر اساس تنظیمات مرورگر) استفاده می شود. اگر تاریخ انقضا معتبری برای محتوای ذخیره شده وجود داشته باشد، مستقیماً از حافظه کش تحویل داده می شود و هیچ درخواستی برای وب سرور مبدا صادر نمی شود.

اگر محتوا تاریخ انقضای معتبری نداشته باشد، مرورگر سرصفحه “If-modified-since” یا “If-none-match” را در درخواست وارد می کند. اگر محتوا تغییر نکرده باشد، 304 از سرور بازگردانده می شود و محتوا از حافظه پنهان بازیابی می شود. از طرف دیگر اگر محتوا تغییر کرده باشد، سرور با 200 پاسخ می دهد و محتوا را به کاربر تحویل می دهد.

نتیجه گیری

حذف نیاز مرورگر به بارگیری محتوا در بازدید های مکرر می تواند عملکرد برنامه های وب را تا حد زیادی بهبود بخشد. عوامل زیادی بر اینکه آیا می توان محتوا را از حافظه پنهان مرورگر محلی در بازدید های مکرر بازیابی کرد یا نه، تأثیر می گذارد، از جمله تنظیمات مرورگر، وب سایت و رفتار کاربر. BIG-IP WebAccelerator می تواند استفاده از حافظه پنهان کاربر را بدون نیاز به تغییر برنامه بهبود بخشد.

منبع: f5.com