shift

Cache-Control چیست؟

Cache-Control چیست؟

عاطفه
دسته: طراحی وبسایت  تگ ها: تنظیمات کش کردن فایل , cache-control چیست , cache-control

 

Cache-Control یک هدر HTTP است که مقدار زمان و روش کش شدن یک فایل را تعریف می‌کند.

 

در این مقاله در مورد اینکه چگونه از Cache-Control استفاده می‌شود و برای سایت چه ارزشی دارد و اینکه، چگونه آن را به‌طور صحیح در وب‌سایتتان بکار بگیرید، بحث می‌کنیم. اکثر سایت‌های مدرن و سریع از Cache-Control برای بهره‌مندی از leverage browser caching استفاده می‌کنند.


محتوا این مقاله:

  •  اساس Cache-Control
  •  زمان انقضا
  •  PUBLIC, PRIVATE, NO-STORE
  •  انتخاب نوع فایل
  •  اضافه کردن به هدر
  •  استفاده از htaccess.
  •  تنظیمات Apache Config
  •  NGINX

 

اساس Cache-Control

اساس هدر Cache-Control، مقدار زمان و روشی که باید کش شدن صورت بگیرد را تعریف می‌کند.

Cache-Control: max-age=2592000, public

وقتی به یک فایل به‌وسیله مرورگر دسترسی پیدا می‌شود، هدر HTTP آن فایل نیز مورد ارزیابی قرار می‌گیرد. وقتی محتویات هدر Cache-Control به مرورگر رسید، مرورگر محتویات آن را بررسی کرده و آن‌ها را اعمال می‌کند.
اگر یک مرورگر ببیند که یک فایل باید برای پنج دقیقه کش شود، آن فایل در کش مرورگر برای پنج دقیقه می‌ماند و اگر آن فایل دوباره صدا زده شود مرورگر مجبور نیست که آن را دوباره از سرور بردارد. به‌طور مثال تصویر لوگوی سایت شما. اگر یک بازدیدکننده به یک صفحه از وب‌سایت شما بیاید و تصویر لوگو سایت شمارا دانلود کند، هنگامی‌که کاربر به صفحات دیگر وب‌سایت شما برود، تصویر لوگو دوباره دانلود نمی‌شود، در عوض از کش استفاده می‌شود.


زمان انقضا چیست؟

زمان انقضا، مقدار زمانی است که یک فایل باید در حافظه کش بماند.


تعیین زمان انقضا

بخش MAX-AGE در هدر شبیه این است:

max-age=2592000


مدت‌زمان کش شدن، برحسب ثانیه بیان می‌شود. مقادیر رایج، موارد زیر هستند:
یک دقیقه: MAX-AGE=60
یک ساعت: MAX-AGE=3600
یک روز: MAX-AGE=86400
یک هفته: MAX-AGE=604800
یک ماه: MAX-AGE=2628000
یک سال: MAX-AGE=31536000
وقتی از MAX-AGE برای تعیین زمان انقضای کش استفاده می‌کنیم باید شامل نوع فایلها و چگونگی استفاده از آن باشد. در این مقاله در مورد جزئیات بیشتری صحبت می‌کنیم.

 

دستورات کش شدن

یکی از دستورات کش شدن در هدر شبیه به مورد زیر است:

PUBLIC

وضعیت هدر Cache-Control بالا PUBLIC است. به این معناست که این فایل به‌صورت PUBLIC کش شده است. به‌طور پیش‌فرض، بیشتر فایل‌ها شامل کش شدن PUBLIC هستند اما زمان‌هایی وجود دارد که برخی از اسناد دارای حساسیت را نمی‌توان به‌صورت PUBLIC کش نمود.
ما سه دستور اصلی را که در Cache-Control وجود دارد را در اینجا بیان می‌کنیم:

  • PUBLIC
  • PRIVATE
  • NO-STORE

 

PUBLIC

دستورالعملی است که اساساً می‌گوید، هر کس در هر سطحی می‌تواند فایل‌ها را کش کند.
در اصل اگر شما می‌خواهید برای افزایش سرعت صفحات چیزی را کش کنید که خصوصی نیست و یا روی زمان‌حساس نیست می‌توانید از دستور PUBLIC استفاده کنید.


PRIVATE

دستورالعمل خصوصی به این معناست که کش شدن برای یک کاربر خاص است. یک مثال می‌تواند صفحات توییتر باشد. وقتی شما به توییتر می‌روید شما یک URL را در نوار آدرس خود می‌بینید و وقتی شخص دیگری وارد توییتر می‌شود همان آدرس را می‌بیند. حتی اگر اطلاعات آن صفحه PUBLIC و با حساسیت پایین باشد، آن برای یک شخص خاص است. (نکته: توییتر فقط یک مثال است و من در مورد اینکه چگونه و چطور استفاده می‌شود نظری ندادم)
بنابراین اگر من به Twitter.com می‌روم و صفحه را رفرش می‌کنم بعضی چیزها برای من کش می‌شود نه برای شما. اگر شما به Twitter.com بروید و بعضی چیزها را رفرش می‌کنید آن‌ها برای شما کش می‌شوند نه برای من.


NO-STORE

دستورالعمل NO-STORE یک دستور قوی‌تری است که از کش شدن تحت هر شرایطی جلوگیری می‌کند.


انواع فایل‌ها

دو سؤال که یک وب مستر باید به آن‌ها جواب بدهد:
چه نوع فایلی را من باید ذخیره کنم؟
چه مدت‌ زمانی باید آن‌ها کش شوند؟


چه نوع فایلی را باید ذخیره کرد؟
به‌عنوان یک راهنمای سریع و کلی، من در زیر به نکاتی در مورد کش کردن نوع فایل‌ها اشاره می‌کنم.

IMG - تصاویر (png, jpg, gif, etc) - عکس‌ها در وب‌سایت معمولاً تغییر نمی‌کنند؛ بنابراین آن‌ها می‌توانند در یک دوره زمان طولانی کش شوند (یک سال).
CSS - فایل‌های CSS گرایش بیشتری به تغییر نسبت به فایلهای دیگر دارند و یک دوره زمانی کوتاه ممکن است نیاز باشد (یک هفته یا ماه).
ICO - (فای و آیکون): به‌ندرت تغییر می‌کند.
JS - جاوا اسکریپت‌ها برای بیشتر بخش‌ها اغلب تغییر نمی‌کنند بنابراین یک‌زمان کش طولانی ممکن است که نرمال‌تر باشد (یک ماه).


نکاتی که باید توجه شود.


تنها شما می‌توانید تعیین کنید چه چیزی برای سایت شما و منابع شما بهتر است. نکته‌ای که من تذکر می‌دهم آن است که اگر شما فایلی را ویرایش کنید (شبیه به فایل CSS) و آن فایل کش شده است، شما باید نام آن را تغییر دهید تا بروز رسانی فایل شما برای همه کاربران اتفاق بیفتد. این انگشت‌نگاری کردن URL نامیده می‌شود. انگشت‌نگاری به وجود آوردن یک فایل جدید به‌وسیله تغییر نام فایل به یک مقدار منحصربه‌فرد است.
به‌عنوان‌مثال اگر نام فایل "MAIN.CSS" بود، می‌توانیم نام آن را به "MAIN1.CSS" عوض کنیم. زمان بعدی که فایل را تغییر دهیم، می‌توانیم آن را "MAIN2.CSS" صدا بزنیم. این برای فایل‌هایی که گاهی اوقات تغییر می‌کنند مفید است.


چگونه کش کنترل را به سایتتان اضافه کنید؟

راه اضافه کردن Cache-Control به فایلهایتان، همان راهی است که برای اضافه کردن هر هدری به سرورتان بکار می‌برید. هر چیزی که ما در این صفحه درباره آن صحبت کردیم دربار هدر Cache-Control بود.


چطور آن را اضافه کنیم؟

این کار بستگی به سرور شما دارد. سناریوهای زیر معمولاً رایج هستند.


استفاده از فایل htaccess.

بیشتر مردم که این مقاله را می‌خوانند احتمالاً از htaccess. برای اضافه کردن Cache-Control به هدرها استفاده می‌کنند.


مثال کد برای htaccess.

کد پایه‌تر برای تنظیم Cache-Control هدر با فایل htaccsess.

Header set Cache-Control "max-age=2628000, public"

 کد بالا توانایی تهیه دستورالعمل‌های کش کردن مختلف برای انواع فایل‌های مختلف را نمی‌دهد. برای اعمال هدر کنترل کش برای انواع مختلف فایل ما باید استفاده کنیم از

# One month for most static assets
<filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$">
Header set Cache-Control "max-age=2628000, public"
</filesMatch>

کد بالا اساساً می‌گوید:

اگر نوع فایل css, js, png یا ico است پس هدر بالا به آن اعمال می‌شود. اکنون ما می‌خواهیم عکس‌ها را به مدت یک سال کش کنیم، اما فایل css را به مدت یک ماه در کش نگه‌داری می‌کنیم. ما می‌توانیم کد بالا را در .htaccess مان بگذاریم.

# One year for image files
<filesMatch ".(jpg|jpeg|png|gif|ico)$">
Header set Cache-Control "max-age=31536000, public"
</filesMatch>
# One month for css and js
<filesMatch ".(css|js)$">
Header set Cache-Control "max-age=2628000, public"
</filesMatch>

 ما دو بلوک کد در بالا داریم. یکی برای تصاویر و یکی برای فایل‌های css. این فقط به شما نشان می‌دهد که می‌توانید چندین بلوک را در فایل.htaccess تان داشته باشید.
 

تنظیمات Http.Conf آپاچی

اگر دسترسی‌های لازم را در سرور دارید سریع‌ترین و مطمئن‌ترین راه برای تنظیم کردن هدرها استفاده از فایل کانفیگ سرور می‌باشد.
کد مثال بالا از.htaccess این کار را انجام می‌دهد. استفاده از FILEMATCH و تنظیم هدر نوع خاصی از دستورالعمل‌های را برای انواع فایل‌ها ایجاد می‌کند (نمونه کد.htaccess در مثال بالا به‌خوبی کار می‌کند).


NGINX

با استفاده از بخشنامه‌های انقضا شما می‌توانید دستورالعمل‌های کش را به سرور یا محل بلاک شده اضافه کنید.

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}

کد بالا برای هر نوع فایلی است که در خط اول لیست شده است. نوع فایل می‌تواند اضافه یا حذف شود. بلاک‌های متفاوتی برای تنظیم مناسب انواع مختلف فایل وجود دارد.


 

علي جوادي
۱۳۹۵-۱۱-۱۶

سلام ، لطفاً يك سايت شخصي خوب ميخوام برام بسازيد بفرماييد چه كار كنم

محمد رضا
۱۳۹۵-۱۱-۲۲

بسیار عالی بود و جامع.....کمتر جایی اینجور توضیح واضح و کامل رو مینویسن یه سوال : این تکنولوژی gzip که توسط سرور داده ها رو فشرده میکنه و برای مرورگر کاربر میفرسته از سیستم کش استفاده میکنه ؟ یا ربطی نداره ؟ چون من میخوام کلا روی سایتم کش فعال نباشه یعنی کاربر تغییرات لحظه ای رو با یه رفش ساده صفحه ببینه این با gzip در تداخل نیست که ؟

محمد رضا
۱۳۹۵-۱۱-۲۲

در واقع از این دو تا کد تو فایل htaccess. استفاده کردم : FileETag None Header unset ETag Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires "-1" # BEGIN Compress text files SetOutputFilter DEFLATE # END Compress text files که اولی برای کش نشدن فایل های مورد نظر و دومی برای فشرده سازی کردن و فرستادن داده ها به سیستم کاربران هستش این 2 الان با هم تداخل دارن ؟

گرافیک کار
۱۳۹۷-۰۶-۲۸

خوبه که ترجمه میکنید یه لحظه فکر کردم منظور اسمتون اینه که مقالات انگلیسی رو ترجمه میکنید اما دیدم منبع نزاشتین!!!! ناقص هم هست must-revalidate و خیلی چیزای دیگه اصلا بهش اشاره نشده

نظر خود را بنویسید...
ارسال نظر
لغو