اگر از همراهان همیشگی پرشین تولز هستید، حتماً مقاله قبلی در مورد رفع خطاهای سایت به کمک GTmetrix را خواندهاید! در این مقاله هم قصد داریم به بررسی ادامه این بحث بپردازیم تا بتوانید با افزایش سرعت سایت، وضعیت سئوی سایت خود را بهبود ببخشید و رضایت کاربران را هم جلب کنید.
درخواست شرطی Last-Modified چیست؟
توی این مدل بررسی برای اینکه فایلها و صفحات کش شده آخرین بار چه زمانی تغییر کردهاند، بر اساس یک تاریخ دقیق با استفاده از Last-Modified مشخص میشود و در هدر مرورگر قرار میگیرد. بنابراین وقتی وارد یک صفحه از سایت میشوید، مرورگر ابتدا Last-Modified را بررسی میکند که ببیند وضعیت کش به چه صورتی است و سپس بر اساس پاسخی که براش مشخص میشود، شروع به ادامه لود صفحه با استفاده از فایلهای کش شده یا اینکه درخواست مجدد از سرور(بخاطر تغییر فایلها) میکند. این درخواست در مرورگر به شکل زیر مشخص خواهد شد.
Last-Modified: Mon, 18 Jan 2019 13:46:32 GMT
حالا که این تاریخ در اولین بازدید به صورت کش شده مشخص شد، در بازدید بعدی کاربر از این صفحه ابتدا درخواستی ارسال میشود که مشخص کند که این صفحه تغییراتی داشته است یا خیر! این تغییرات میتواند هامن ویرایش محتوای صفحه یا فایلها باشد که با استفاده از Last-Modified مشخص میشود. پس وقتی شما مثلا بعد از ۳ روز تغییری در صفحه دهید، مقدار بالا به صورت زیر در هدر مرورگر نمایش داده میشود.
Last-Modified: Mon, 22 Jan 2019 19:24:11 GMT
در این صورت وقتی بازدید کننده وارد سایت میشود، ابتدا درخواستی به سرور ارسال میکند که ببیند صفحه تغییراتی داشته است یا خیر! در این مواقع چون صفحه ما ویرایش میشود و تغییراتی را داشته، در این صورت پاسخ مثبت با کد ۲۰۰ به مرورگر ارسال میشود و مرورگر متوجه میشود که این صفحه نسبت به بازدید قبلی که مربوط به سه روز پیش بوده تغییراتی را داشته است. بنابراین مجددا فایلهایی که تغییر کردن با نسخه جدید از سرور دانلود و جایگزین میشوند و دوباره در کش مرورگر قرار میگیرند. اگر در پاسخ ارسالی صفحه تغییری نکرده باشد، به جای کد ۲۰۰ کد ۳۰۴ یا ۳۰۴ Not Modified ارسال خواهد شد.
درخواست شرطی Etag چیست؟
این درخواست شرطی هم دقیقاً مشابه Last-Modified است، با این تفاوت که در این جا با تاریخ سر و کار نداریم. در این حالت وضعیت کش توسط قطعه کد هش شده توسط MD5 مشخص خواهد شد. به عنوان مثال در اولین بازدید با استفاده از کد MD5 مشابه نمونه زیر که برای مرورگر قابل خوندن است، مشخص میشود که آخرین تغییرات با این کد هش شده است:
ETag: "15f0fff99ed5aae4edffdd6496d7131f"
حال اگر محتوای صفحه رو تغییر دهید و ویرایش کنید، در این صورت کد هش شده بالا هم تغییر خواهد کرد و در این صورت مشابه نمونه قبلی توسط کد ۲۰۰ یا ۳۰۴ مشخص میشود که صفحه تغییری داشته است یا خیر! تفاوتی که در این جا وجود دارد، این است که اگر تغییری صورت نگیرر به صورت زیر مشخص خواهد شد.
If-None-Match: "15f0fff99ed5aae4edffdd6496d7131f"
حالا که با انواع هدر cache validator و entity tags آشنا شدید، برای اینکه ارور Specify a cache validator و Configure entity tags رو در جی تی متریکس برطرف کنید، باید هر دو یا حداقل یکی از درخواستهای Last-Modified یا Etag رو از سمت وب سرور برای مرورگر ارسال کنید. معمولا درخواست Last-Modified به صورت عمومی در همه وب سرورها فعال است و مشکلی از این بابت وجود نخواهد داشت. درخواست Etag هم در سرورهای نوع آپاچی با ورژن بالاتر از ۲٫۴ و برای وب سرور NGINX که از نسخه ۲۰۱۶ به بعد ارائه شده، فعال است که برای این نوع سرورها نیازی به فعال کردن دستی ندارید. حالا شاید این سوال برایتان پیش بیاید که با این شرایط سرور که توضیح داده شد، پس چرا با خطا Specify a cache validator و Configure entity tags مواجه شدید؟ این مورد کاملاً به کانفیگ سرور توسط شرکت هاستینگ شما بستگی دارد و اگه با دو خطای Specify a cache validator و Configure entity tags در جی تی متریکس مواجه شدید باید از شرکت هاستینگ خودتون بخواهید که وضعیت فعلی را تغییر دهند. چرا که شما دسترسی لازم رو برای تغییرات سرور ندارید و تنها در صورتی خودتون میتوانید این خطاها را برطرف کنید که به سرور دسترسی داشته باشید. اگر پاسخی از سمت هاستینگ برای اصلاح این موارد نگرفتید هم باید از هاست شرکت معتبری استفاده کنید که این موارد رو رعایت کرده باشد.
یکی از خطاهای رایجی که هنگام تست سرعت سایت با GTmetrix با آن مواجه میشوید، با عنوان leverage browser caching در جی تی متریکس است که مربوط به کش سایت هست. همانطور که از معنی لغوی آن خطا برداشت میشود، این است که قدرت نفوذ کش رو در مرورگر کنترل کنید. یعنی طوری فایلهای سایت رو مدیریت کنید که بهترین نوع کش رو برای انواع پسوندها در سایت برای کش شدن در مرورگر انتخاب کنید.
فرآیند کش درخواستی است که تحت HTTP بین سرور و مرورگر منتقل میشود و در آن مشخص میشود که چه فایلهایی برای چه مدتی کش شوند. این مدت زمان کش شدن رو با استفاده از Expires و فرآیندی که در هر بازدید بررسی میکند که ببیند آیا تغییری در فایلها ایجاد شده یا نه رو Cache-Control مشخص میکند. این دو مورد درواقع درخواستی هستند که در هدر اجرا میشن و در نهایت وضعیت Cache Length رو مشخص میکنند.
در مقاله بعدی به بررسی این مسئله و ادامه این بحث میپردازیم.