در این مقاله دوبست با روش رفع خطای Specify a cache validator و همچنین خطای Configure entity tags یا ETags خواهیم پرداخت.
بعضی اوقات برطرف کردن این مشکلات ساده و بعضی اوقات تخصصی و نیاز به دانش برنامه نویسی دارد.
گاهی نیز ممکن است سایت ما این اررور ها را نداشته باشد و فقط به دلیل تداخل در آن ابزار آنلاین، این مشکل به ما نشان داده شده است.
این مقاله به این دو اررور میپردازد و میآموزیم که آیا میشود این خطا ها را برطرف کرد یا خیر.
نکات مربوط به اررور ها:
- خطای Specify a cache validator در ارتباط با خطاهای PageSpeed گوگل میباشد.
- خطای Configure entity tags یا ETags در ارتباط با YSlow یاهو است ولی ما روش رفع خطای Specify a cache را میآموزیم که با رفع آن خطای ETags نیر 99% رفع میشود.
مختصری دربارهی اررور Specify a cache validator
اولویت: زیاد
میزان سختی: راحت
میانگین امتیاز: 92%

آشنایی با تعیین cache validator
این خطا به ما بیان میکند که کش سرور ما به خوبی کانفیگ نشده و نیاز به بازنگری دارد.
حال تنظیم نشدن صحیح کش وب سرور به چه معناست ؟
سروری که درست کانفیگ شده باشد، در جهت بهینه سازی سرعت سایت، تعدادی محتوای هدر HTTP جهت کش فایلهای سمت کاربران، میفرستد.
این هدرهای کش دو وظیفه مهم را بر عهده دارند.
وظیفه نخست آنها Cache Validate یا همان معتبرسازی فایلهای کش شده است.
وظیفه بعدی آنها Cache Length یا همان تعیین اندازه و میزان زمانی آن کش میباشد.
اگر یکی از این موارد نباشد، مشکلاتی برای سایت به وجود خواهد آمد.
برای درک بهتر موضوع در ادامه به توضیح آن میپردازیم.

برای راهنمایی بیشتر موارد زیر را با دقت بخوانید:
- کش باعث کاهش درخواستهای ارسال شده سمت سرور میشود. مثلا برای بارگذاری یک عکس با فعال بودن کش تنها یک درخواست ارسال میشود.
- کش از سمت سرور تنظیم و کنترل میشود و سمت کاربر ارسال میشود تا در مرورگر کاربر قرار گیرد.
- این تنظیمات به عنوان هدر HTTP ارسال شده که این محتوا توسط کاربر قابل رویت نیست ولی مرورگر آن را میخواند.
- کش از دو هدر HTTP به نامهای Cache Validate و Cache Length تشکیل شده که هر کدام اگر نباشند، خطایی ایجاد خواهد شد.
Cache Length
این عبارت به معنای طول کش یا مقدار زمان کش است.
دو نوع هدر HTTP به نامهای Cache-Control و Expires وجود دارد که میزان Cache Length را تایین میکند.
دو هدر نام برده وظیفه تایین زمان نگهداری فایل در مرورگر کاربر را برعهده دارند.
در صورت تنظیم نشدن آن خطای Leverage browser caching پدیدار میشود.
توجه کنید که هدر Cache Length هیچوقت باعث ایجاد دو خطای Specify a cache validator و (Configure entity tags (ETags نخواهد شد.
در صورتی که این خطا را ندارید بدانید که هدر از نوع Cache-Control مدت زمان انقضای کش را مشخص میکند.
یعنی برای کش کردن یک عدد بر حسب ثانیه را تعیین میکند.
درحالی که هدر از نوع Expires تاریخ زمان انقضای کش را درج میکند.
به این معنی که مثلا تعیین میکند که فایل X تا تاریخ Y در مرورگر کاربر کش شود.
به کار بردن هر دو نوع هدر Expires و Cache-Control ضروری نیستن
شما تنها کافی است جهت افزایش سرعت سایت و بهبود سئو از یکی آنها استفاده کنید.
اما میتوانید با تایین هردو آنها جهت کش شدن فایلها آسوده خاطر شوید.
در اینجا بهتر است بدانید که هدر Cache-Control در مقایسه با Expires در اولویت قرار دارد.
Cache-Control جدیدتر است ولی برخی از سایتهای آنالیز سرعت و سئو مانند GTmetrix هدرExpires را بررسی میکنند.

Cache Validate
به طور کلی دو هدر Last-Modified و Etag وجود دارند که Cache Validate را معلوم میکند.
وظیفه این دو هدر تعیین تاریخ فایل کش شده و ورژن آن است که در صورت اشتباه در تنظیم به خطای Cache Validate برمیخوریم.
مهم است که بدانید تنها فایلهای موجود در سرور شما را میتوان رفع خطا کرد.
اگر فایل روی سایت شما لود میشود ولی در سرور دیگری قرار دارد، به دلیل عدم دسترسی، امکان رفع اررور نیست.
در این پست دوبست ما به هدرهایی که Cache Validator را تعیین میکنند، میپردازیم.
با توجه به صحبت قبل وظیفه این نوع هدرها، تعیین ورژن فایل کش شده و نشان دادن آخرین تاریخ کششده میباشد.
هدرهای Last-Modified و Etag هر دو همین وظیفه را انجام میدهند و اسم دیگری نیز دارند.
به این نوع هدرها Conditional requests یا درخواستهای شرطی نیز گفته میشود.
درخواست شرطی Last-Modified

در این مثال مقابل Last-Modified تاریخ خاصی نشان داده میشود.
این درخواست شرطی، تاریخ آخرین ورژن یا آخرین ویرایش عکس یا صفحه ای خاص را نشان میدهد.
مانند نمونه کد زیر:
Last-Modified: Mon, 08 Jan 2019 17:40:05 GMT
در صورت تغییر و آپدیت فایل یا صفحهای از سایت، برای عملکرد درست تغییرات باید سمت کاربر نیز انجام شود.
درنتیجه در زمان ورود کاربر به سایت، یک درخواست شرطی توسط هدر مجزایی با عنوان If-Modified-Since فسمت سرور فرستاده میشود.
مقدار این هدر از عبارت Last-Modified برداشت میشود.
زکانی که If-Modified-Since سمت سرور میرود بررسی میکند که آیا تاریخ سمت سرور آپدیت شده است ؟!
در این مرحله از کار منتظر جواب وب سرور میماند.
در اینجا اگر این جواب با کد 200 فرستاده شود به معنی جواب مثبت و تغییر تاریخ است.
اما اگر وب سرور سایت کد 304 یا 304 Not Modified را ارسال کرد، معنی عکس را میدهد و از فایلهای کش مرورگر استفاده میشود.
Last-Modified-Since: Mon, 08 Jan 2019 17:40:05 GMT
با توجه به توضیحات قسمت Cache Length بیان شد که هدر Cache-Control اولویتش نسبت به Expires بیشتر است.
حال با فرض دریافت پاسخ 200 از درخواست If-Modified-Since، تاریخ Last-Modified تغییر میکند.
این تغییر باعث تنظیم مجدد مقادیر هر دو هدر Cache-Control و Expires و ایجاد فایل جدید با آخرین ویرایش در کش مرورگر کاربر میشود.
درخواست شرطی Etag

ETag یا Entity Tag یا همان “برچسب هویتی” کلیّت وظیفهاش مانند هدر Last-Modified تغییرات فایل و صفحه را به مرورگر کاربر خبر میدهد.
البته با این تفاوت که به جای تاریخ و زمان آخرین ویرایش، از فایل منحصر به فردی مانند MD5 Hash جهت شناسایی آن فایل یا صفحه توسط سرور کمک میگیرد.
ETag: "15f0fff99ed5aae4edffdd6496d7131f"
از این سو نیز مرورگر کاربر به جای درخواست هدر قبلی If-Modified-Since که به صورت Last-Modified ارسال میشده، هدر مجزایی دیگر با عنوان If-None-Match که مقدارش را از هدر ETag میگیرد، ارسال میکند.
همانند قبل وب سرور با ارسال کد 200 یا 304 معلوم میکند گه آیا تغییری صورت گرفته است یا خیر؟!
If-None-Match: "15f0fff99ed5aae4edffdd6496d7131f"
توجه: در سایت GTmetrix ممکن است اررو (Configure entity tags (ETags به دلیل نبود هدر ETags نمایان شود که با رفع خطای Specify a cache validator آن نیز رفع خواهد شد.
آموزش رفع خطای Specify a cache validator
جهت رفع این خطا باید هدر های Last-Modified یا Etag یا هر دو آنها از سمت وب سرور فرستاده شود.
هدر Last-Modified معمولآ از سمت وب سرورها فعال است و نیازی به تنظیم مجدد دستی از سمت شما نیست.
هدر Etag پیش فرض داخل وب سرورهای Apache ورژنهای 2.4 به بالا فعال است و سمت کاربر این هدر را ارسال میکند.
هدر Etag درون وب سرور NGINX از ورژن 2016 به بالا نیز به صورت پیش فرض فعال است.
چطور این خطا را برطرف کنیم؟
با خرید هاست از هاستینگ های معروف به ندرت ممکن است با اررور Specify a cache validator مواجه شوید.
اما در صورت وجود این اررور به پشتیبانی هاستینگ خود تیکت کرده و درخواست ارسال این دو هدر یا یکی از آنها را کنید.
روش دیگر برای رفع این خطا، رفع اررور Leverage browser caching است.
ممکن است تنظیمات وب سرور به گونهای باشد که با رفع خطای Leverage browser caching مشکل Specify a cache validator نیز برطرف شود.
در صورت مطالعه و خواندن مقالات دیگر در رابطه با این اررور متوجه میشوید خیلی از سایتها برای رفع این مشکل از کد مربوط به Leverage browser caching استفاده کردهاند.
باز هم خاطر نشان کنیم که این درصورتی هست که فایل مورد نظر در هاست خود شما بارگذاری شود.
در صورت بارگذاری فایل یا صفحه در سرور دیگر، چون دسترسی به آن ندارید، امکان رفع این مشکل نیز نمیباشد.
خلاصه مقاله
جهت افزایش سرعت سایت باید فایلهای پر استفاده مانند عکسها در مرورگر کاربر کش شوند.
این امر نیاز به ارسال درخواست توسط سرور را دارد.
کشها نیاز به دو نوع هدر HTTP دارند:
هدر Cache Validate اولین آنها است که معنی معتبرسازی فایلهای کش را میدهد و در صورت نبود با خطای Cache Validate مواجه میشوید.
هدر بعدی Cache Length معنای طول یا زمان کش را میدهد و در صورت نبود با خطای everage browser caching مواجه میشوید.
Cache Validate نیز خود دو نوع است:
یکی Last-Modified میباشد و دیگری Etag.
در صورت وجود Last-Modified و نبود Etag با خطای (Configure entity tags (ETags مواجه میشویم.
هرچند که این مورد اهمیت ندارد و مهم این است که یکی از انتخابهای Cache Validate در دسترس باشد.
پایان
مقاله رفع خطای Specify a cache validator و Configure entity tags در سایت GTmetrix نیز به پایان رسید.
امیدواریم با این آموزش دوبست توانسته باشیم کمک شایانی در افزایش سرعت سایت و بهبود سئو به شما همراهان کرده باشیم.
تا مقالات آموزشی دیگر بدرود.