این خطا زمانی اتفاق می افتد که به عنوان مثال یک عکس یا هرنوع فایل یکسان مانند فایل های css و یا javascript  را با دو آدرس متفاوت در صفحه ای از سایت خود بارگذاری  کنید ، این کار باعث می شود تعداد درخواست های سمت سرور افزایش یابد. چون هرکدام از این فایل ها یک نوع درخواست http به حساب می آیند و وقتی درخواستهای http افزایش می یابد ،درگیری سرور برای پاسخ بیشتر می شود.
آموزش رفع خطای serve resources from a consistent url در gtmetrix
آگوست 24, 2020
آموزش رفع خطای combine images using css sprites در gtmetrix
آگوست 28, 2020

آموزش رفع خطای specify a cache validator در gtmetrix

دو هدر http وجود دارد که cache validate را تعیین می کنند یکی last-modified و دیگری etag . این دو هدر مشخص می کنند که فایل کش شده برای چه تارخی و ورژنی هستند ، و توجه داشته باشید که شما فایل هایی که در سرور تان هستند را می توانید رفع خطا کنید ، پس اگرفایلی در سایت شما از طریق یک سرور دیگر لود می شود دلیل آن دسترسشی نداشتن به آن سرور و فایل است و نمی توانید کاری انجام دهید.این دو درخواست را به عنوان درخواست شرطی می شناسیم .که براساس یک سری شروط باید وضعیت کش صفحات را مشخص کنند.

آموزش رفع خطای specify a cache validator در gtmetrix

یکی از خطاهایی که هنگام تست سرعت سایت با  Gtmetrix با آن مواجه می شویم به نام خطای specify a cache validator  که از سری خطاهای page speed است.

 

specify a cache validator چیست ؟

این پارامتر فایل هایی که به درستی کش نشده باشند یا امکان کش در آن ها وجود ندارد را به ما نمایش می دهد، که می توانید با بررسی هر فایل وضعیت کش را برای آن ها مشخص کنید.

چند نوع کش داریم ؟

کش باعث کاهش تعداد درخواست های سمت سرور می شود.درصورتی که کش فعال باشد برای بارگذاری یه عکس فقط یک درخواست ارسال می شود.کش از سمت سرور تنظیم می شود و به کاربر ارسال می شود تا در مرور گر قرار بگیرد.این تنظیماتی که توسط سرور ارسال می شود به عنوان هدر http ارسال می شود که توسط کاربر قابل مشاهده نیست ولی مرورگر آن را می خواند.

در فرآیند کش شدن چه اتفاقی رخ می دهد ؟

فرآیند کش درخواستی است که تحت عنوان http بین سرور و مرورگر جابه جا می شود ودر این فرآیند مشخص می شود که چه فایل هایی برای چه مدتی باید کش شوند. این مدت زمان کش شدن را با استفاده از expires و فرآیندی که درهر بار بازدید تغییراتی را که در فایل ها ایجاد شده است را بررسی می کند cache-control آن را مشخص می کند.این دو مورد در نهایت cache length را مشخص می کنند.

کش از دو هدر http یکی cache validate و cache length تشکیل شده است . در صورتی که هر کدام از این دو نباشند، باعث ایجاد خطا می شود.

این مقاله رو هم بخونید
آموزش رفع خطای compress componets with gzip درgtmetrix
اشنایی با cache  validator :

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

 

دو وظیفه ی مهم هدرهای cache

اولین وظیفه آن ها cache validate یا معتبر سازی فایل های کش شده است.

وظیفه  بعدی آن ها cache length  یا تیین اندازه یا میزان زمانی که آن کش نگه می دارد.

در صورت نبود هر یک از این دو کش مشکلاتی برای سایت ما به وجود می آید.

Cache validate

دو هدر http وجود دارد که cache validate را تعیین می کنند یکی last-modified و دیگری etag . این دو هدر مشخص می کنند که فایل کش شده برای چه تارخی و ورژنی هستند ، و توجه داشته باشید که شما فایل هایی که در سرور تان هستند را می توانید رفع خطا کنید ، پس اگرفایلی در سایت شما از طریق یک سرور دیگر لود می شود دلیل آن دسترسشی نداشتن به آن سرور و فایل است و نمی توانید کاری انجام دهید.این دو درخواست را به عنوان درخواست شرطی می شناسیم .که براساس یک سری شروط باید وضعیت کش صفحات را مشخص کنند.

خطای specify a cache validator : دو هدر http وجود دارد که cache validate را تعیین می کنند یکی last-modified و دیگری etag . این دو هدر مشخص می کنند که فایل کش شده برای چه تارخی و ورژنی هستند ، و توجه داشته باشید که شما فایل هایی که در سرور تان هستند را می توانید رفع خطا کنید ، پس اگرفایلی در سایت شما از طریق یک سرور دیگر لود می شود دلیل آن دسترسشی نداشتن به آن سرور و فایل است و نمی توانید کاری انجام دهید.این دو درخواست را به عنوان درخواست شرطی می شناسیم .که براساس یک سری شروط باید وضعیت کش صفحات را مشخص کنند.

آموزش رفع خطای specify a cache validator

 درخواست شرطی last-modified :

این هدر معمولاً توسط سرور به طور خودکار ارسال می شود ، بنابراین نیازی به افزودن دستی آن نیست. این هدر بررسی می کند که آیا این پرونده از آخرین باری که درخواست شده است تغییر یافته است و آیا نیاز به نسخه جدیدتر را دارد یا می تواند از حافظه نهان محلی بارگیری شود. بنابراین وقتی وارد یک صفحه از سایت می شوید مرورگر ابتدا last-modified را برسی می کند که متوجه شود که وضعیت کش در چه حالتی قرار دارد. و سپس با پاسخی که دریافت می کند ، شروع به ادامه لود صفحه یا درخواست مجدد (به دلیل تغییرفایل) می کند.این درخواست در مرورگر به صورت زیر است:

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

 

Last-Modified:  Mon, 11 jan 2017 13:17:22 GMT

 

حال این تاریخ به صورت کش شده برای کاربرمشخص می شود،وقتی کاربر برای بار بعد ازصفحه بازدید می کند ابتدا درخواستی ارسال می شود که مشخص می کند  که آیا این صفحه تغییراتی داشته است یا خیر.این تغییرات شامل محتوای صفحه و یا فایل است که توسط last-modified مشخص می شود.مثلا وقتی شما بعداز 5 روز تغییری در صفحه ایجاد کنید مقدار بالا به صورت زیر در هدر نمایش داده می شود.

 

Last-Modified:  Mon,  16  jan  2017  10:55:14  GMT

در این صورت وقتی بازدیدکننده وارد سایت می شود ابتدا درخواستی به سرور ارسال می کند که ببیند صفحه تغییری داشته است یا خیر.ودر اینجا به دلیل اینکه صفحه ما ویرایش شده است و تغییراتی داشته است.پاسخ مثبت با کد 200 ارسال می شود و مرورگر متوجه می شود که این صفحه نسبت بازدید قبلی که 5 روز گذشته بوده است دچار تغییراتی شده است. و مجددا فایل هایی که تغییرکرده اندبا نسخه جدید از سرور دانلود و جایگزین می شوند و مجددا در کش مرورگر قرارمی گیرند.و درصورتی که صفحه تغییری نکرده باشد ،در پاسخ ارسالی به جای کد 200 کد 304 یا not modified 304 ارسال می شود.

درخواست شرطی etag :

این درخواست شرطی مانندlast-modified  تغیرات صفحه یا غایل را به مرورگر کاربر اطلاع می دهد. ، اما تفاوتی که دارد این است که با تاریخ سرو کار ندارد در این حالت وضعیت کش توسط قطعه کد کش شده توسط md5 مشخص می شود. هر زمان که تغییرات در پرونده رخ می دهد ، نسخه جدیدی از Etag ایجاد می شود. این نوعی اثر انگشت است و گاهی از آن برای ردیابی سرور استفاده می شود.پس در اولین بازدید کدی که برای مرورگر قابل خواندن است نمونه کد زیر است:

این مقاله رو هم بخونید
انتخاب دامنه مناسب - قسمت دوم

 

Etag : “15f0fff99ed5aae4edffdd6496d7131f”

 

اگراگر محتوای صفحه را تغییردهید و آن را ویرایش کنید کد کش شده بالا هم تغییر خواهد کردو در این صورت شبیه کد 200 یا 304 مشخص می شود که صفحه تغییری داشته است یا خیر.تفاوتی که در اینجا وجود دارد که اگر تغییری صورت نگیرد به صورت زیر مشخص می شود.

 

If-none-match: “15f0fff99ed5aae4edffdd6496d7131f”

 

درآخر :

حال که با هدر cache validator آشنا شدید ، برای رفع ارور specify a cache validator باید هر دو یا حداقل یکی از درخواست های last-modified یا etag را از سمت وب سرور برای مرورگر ارسال کنید. معمولا درخواست last-modified به صورت عمومی در همه وب سرورها فعال است و مشکلی برای این وجود ندارد.

مطالب قبلی :

آموزش رفع خطای serve resources from a consistent url در gtmetrix

آموزش رفع خطای put css in the document head در gtmetrix

آموزش رفع خطای minimize request size در gtmetrix

آموزش رفع خطای inline small javascript در gtmetrix

 

Aida Parvaresh
Aida Parvaresh
آیداپرورش هستم،علاقمند به تکنولوژی و تولید محتوا،مدتیه که با تیم خوب هفت وب همکاری دارم.

2 Comments

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *