آنچه در این آموزش خواهید آموخت:
هنگام کش شدن چه فرآیندی در سرور رخ میدهد؟
آموزش رفع خطای Specify a cache validator و Configure entity tags در GTmetrix
یکی از خطاهای رایجی که هنگام تست سرعت سایت در GTmetrix با آن مواجه میشوید , خطای Specify a cache validator در بخش PageSpeed و خطای Configure entity tags (Etags) که در بخش Yslow جی تی متریکس نمایش داده میشود و مربوط به کش سرور است.
زمانی که فایل های یک صفحه را کش میکنید باید در بازدید های بعدی به صورت صحیح تغییرات انجام گرفته روی صفحات را از طریق مرورگر اعلام کنید تا فایل های تغییر یافته دوباره از سرور درخواست شوند که نسخه کش شده در سیستم کاربر به نسخه جدید آپدیت شود.
هنگام کش شدن چه فرآیندی در سرور رخ میدهد؟
درخواستی که تحت HTTP بین سرور و مرورگر ردوبدل میشود و طی این درخواست مدت زمان کش فایل مشخص میشود , فرآیند کش نامیده میشود. Expires مدت زمان کش شدن و Cache Control تغییر ایجاد شده در فایل ها را طی هر بازدید بررسی میکند. Expires و Cache Control درخواست های اجرایی در هدر میباشند که در انتها وضعیت Cache Length را مشخص میکنند.
این بخش را میتوانید در مرورگر خود با استفاده از کلیدهای میانبر Ctrl + Shift + I در بخش Network زبانه Headers مشاهده کنید.
Cache Length
هدر های Cache Control جهت تعیین مدت زمان انقضا و Expires جهت تعیین تاریخ انقضا , مشخص میکنند که یک فایل چه مدت زمانی را به عنوان کش میتواند در مرورگر باقی بماند. درصورت عدم تعیین این وضعیت با خطای Leverage browser caching روبرو خواهید شد. حداقل از یکی از این دو درخواست در هدر باید استفاده کنید تا وضعیت کش در سرور برای مرورگر مشخص شود. درصورت استفاده از هردو درخواست این عمل برای سایت شما مفید بوده و سرعت آن بهبود خواهد یافت.
Cache Validate
پس از تعیین وضعیت Cache Length اکنون نوبت به Cache Validate میرسد تا توسط دو هدر HTTP به نام های Last-Modified و Etag تعیین کند که فایل کش شده برای چه تاریخ و چه نسخه ای است. درصورت عدم تعیین این دو هدر , با خطای Specify a cache validator روبرو خواهید شد. این دو درخواست به عنوان درخواست شرطی شناخته شده اند که بر حسب یک سری شروط وضعیت کش صفحات را مشخص میکنند.
درخواست شرطی Last-Modified
در این نوع بررسی آخرین تغییر فایل ها و صفحات کش شده به صورت یک تاریخ دقیق با Last-Modified مشخص شده و در هدر مرورگر قرار میگیرد. بنابراین پس از ورود به یک سایت مرورگر ابتدا Last-Modified را چک میکند تا وضعیت کش را مشاهده کند. سپس طبق پاسخ مشخص شده به ادامه بارگیری صفحه با استفاده از فایل های کش شده و یا درخواست مجدد از سرور (درصورت ایجاد تغییر در فایل) میپردازد. این درخواست به بصورت زیر در مرورگر مشخص خواهد شد.
Last-Modified: Sun, 15 Nov 2020 11:52:10 GMT
اکنون که این تاریخ در بازدید اول به صورت کش تعیین شد , در بازدید های بعدی ابتدا درخواستی با محتوای اینکه آیا تغییراتی در این صفحه اعمال شده است یا خیرارسال میشود. درصورتی که برای مثال پس از 5 روز تغییری در صفحه اعمال شود , مقداری که در بالا آورده بودیم به صورت زیر در هدر مرورگر نمایان خواهد شد.
Last-Modified: Fri, 20 Nov 2020 9:45:32 GMT
در این هنگام پس از ورود کاربر به سایت و ارسال درخواست به سرور , به علت ایجاد تغییر در صفحه پاسخ مثبت با کد 200 به مرورگر ارسال میشود و مرورگر از ایجاد تغییر در صفحه مطلع شده و فایل هایی را که دستخوش تغییر شده اند را مجددا از سرور دانلود کرده و جایگزین نسخه قبلی آنها میکند و دوباره آنها را کش میکند.
درصورتی که صفحه تغییر نکرده باشد به جای کد 200 کد 304 یا همان Not Modified 304 که به معنای عدم تغییر صفحه است به مرورگر ارسال خواهد شد.
درخواست شرطی Etag
درخواست شرطی Etag نیز مشابه درخواست قبلی است اما در این درخواست با تاریخ کاری نخواهیم داشت بلکه وضعیت کش به وسیله کد هش شده توسط MD5 مشخص میشود. برای مثال در بازدید اول با استفاده از نمونه کد MD5 زیر مشخص میشود که آخرین تغییرات با این کد هش شده است.
ETag: “15f0fff99ed5aae4edffdd6496d7131f”
اکنون درصورت تغییر محتوای صفحه , کد هش شده ای که در بالا آورده ایم نیز تغییر خواهد کرد. همانند درخواست قبلی در این درخواست نیز کد 200 یا 304 تغییر یا عدم تغییر صفحه را مشخص میکند. درصورتی که تغییری اعمال نشود , کد زیر نمایش داده خواهد شد.
If-None-Match: “15f0fff99ed5aae4edffdd6496d7131f”
آموزش رفع خطای Specify a cache validator و Configure entity tags در GTmetrix
اکنون جهت رفع خطای Specify a cache validator و Configure entity tags در جی تی متریکس , یک یا هردو درخواست Last-Modified و Etag را از سوی وب سرور به مرورگر ارسال کنید. در اکثر مواقع درخواست Last-Modified در تمامی وب سرورها فعال است و درخواست Etag نیز در سرورهای آپاچی با نسخه بالاتر از 2.4 و وب سرور NGINX در نسخه های ارائه شده از 2016 به بعد فعال است و نیاز به فعالسازی دستی در این نوع سرورها نخواهید داشت.
درصورتی که به سرور دسترسی ندارید و با این دو خطا مواجه شده اید شما قادر به رفع خطا نخواهید بود و میبایست به شرکت هاستینگ مربوطه جهت رفع این ارور تیکت دهید.
امیدواریم این آموزش برای شما مفید واقع شده باشد و به کمک آن توانسته باشید ارور Specify a cache validator و Configure entity tags را در جی تی متریکس رفع کنید. درصورت بروز هرگونه سوال یا مشکل میتوانید آن را در بخش دیدگاه بیان کنید.
آموزش های مرتبط:
آموزش رفع خطای Optimize images در GTmetrix
آموزش رفع خطای optimize the order of styles and scripts در GTmetrix