منبع: shift.ir
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;
}
کد بالا برای هر نوع فایلی است که در خط اول لیست شده است. نوع فایل میتواند اضافه یا حذف شود. بلاکهای متفاوتی برای تنظیم مناسب انواع مختلف فایل وجود دارد.
درود برشما وب سایت خیلی خوبییی بود
ممنون از اشتراک گذاریتون
موفق و پیروز باشید دوست عزیز