ETAGs چیست؟
یکی از فاکتورهای مهمی که در یک فرایند وجود دارد، فاکتور سرعت است. امروز دیگر خبری از صبوری و انتظار نیست، چرا که زندگی ماشینی انسان مدرن امروز، سرعت را طلب می کند و هر کسب و کاری که سرعت بالایی داشته باشد، صفر تا صد محبوبیت را می تواند در مدت زمان کوتاهی طی کند؛ فرق ندارد که کسب و کار سنتی باشد یا آنلاین.
ETAGs و Expiry headers کمک می کنند تا سرعت سایت شما افزایش پیدا کنند و این افزایش سرعت سایت هم می تواند سئو سایت شما را بهینه کند و کاربران جدیدی وارد سایتتان کند و هم آن ها را به کاربران همیشگی شما تبدیل کند.
فاکتور سرعت در دنیای فناوری اطلاعات اللخصوص world wide web نقش پررنگ تری دارد. زمانی که به اهمیت نقش سرعت پی می بریم که تبدیل شود به یکی از مهم ترین پارامتر ها در رتبه دهی سایت. همانطور که گفتیم، انسان امروز نمی خواهد انتظار بکشد تا سایتی لود شود، چرا که انتخاب های بیشتری پیش رویش هستند (نباشید، هستند!). بنابراین زمانی که سایت شما سرعت کافی را ندارد، کاربران به سرعت از سایت شما خارج می شوند و وارد سایت های دیگر می شوند. سرعت زیاد سایت می تواند هم سبب حفظ مشتریان شود و هم در مصرف پهنای باند صرفه جویی کند.
شاید برایتان جالب باشد که بگوییم پایداری سرور، یک رابطه مستقیم با بارگذاری سایت دارد. هر اندازه که زمان طولانی تر باشد، سبب خاموش شدن یا همان دان تایم می شود. زمانی که صحبت از سرعت یک سایت می شود، فاکتورهای ETAGS و Expiry headers حرف اول را می زنند. این دو فاکتور اصلی ترین کاری که انجام می دهند، این است که محتوا را توسط سیستم کاربران شناسایی کنند تا بتوانند آخرین فایل های موجود در سایت و به روزرسانی ها را دریافت کنند.
اگر شما هم دوست دارید تا بیشتر با این دو فاکتور آشنا شوید و از آن ها برای افزایش دادن سرعت سایت خودتان استفاده کنید، توصیه می کنیم این مقاله را از دست ندهید.
ETAGS چیست؟
ETAGS در نسخه HTTP.1.1 معرفی شده است که مخفف عبارت Entity TAGS است که یک فایل هدر محسوب می شود. ETAGS ها به اعتبار سنج ها یا همان validators شباهت دارد.
از طرف دیگر ETAGS شبیه یک checksum است که اگر محتوای یک فایلی تغییر پیدا کند، آن هم تغییر می کند. زمانی که کاربر فایلی را درخواست می کئد، مرورگر به سمت سرور هدایت می شود و به درخواست بررسی را به یک فایل در سرور می دهد که دو حالت پیش می آید: یا این فایل به صورت کش در مرورگر کاربر وجود دارد و یا ندارد. پس از آن سرور ETAGS های ارسال شده را بر رسی می کند و آن را با ETAGS که روی سرور وجود دارد، مقایسه می کند که ببیند آیا یکی هستند یا تفاوت دارند.
اگر شباهتی بین ETAGS ارسال شده و ETAGS سرور یافت شود، سرور وضعیت HTTP 304 را به مرورگر کاربر ارسال می کند که یک پاسخ است که به معنای تغییر داده نشده است و این را اعلام می کند که کاربر قادر است از فایل کش شده در سیستم خود استفاده کند.
حالا وضعیتی را بررسی می کنیم که بین فایل های ETAGS هیچ شباهتی وجود ندارد، در این صورت سرور وضعیت HTTP 200 را پاسخ می دهد و در نهایت آخرین فایل موجود را به کاربر ارسال می کند و کاربر آخرین فایل را بارگذاری می کند
Expiry Headers به چه معناست؟
زمانی که شما نمی خواهید کاربران برای هر بررسی فایل و بروز رسانی کردن آن ها درخواستی به سمت سرور ارسال کنند، از Expiry Headers استفاده می شود. احتمالا این سوال برایتان وجود دارد که چه تفاوتی با ETAGS دارد؟ در ETAGS ها کاربر برای آن که بتواند بروز رسانی ها دریافت کند، با سرور ارتباط برقرار می کند و به ازای هر فایل و محتوا، یک درخواست ارسال می کند. در Expiry Headers سرور از زمان انقضای دیتا ها، اطلاع دارد و در آن بازه زمانی که منقضی شده اند، فایل های کش شده در سیستم کاربر را بروزرسانی می کند؛ همین موضوع سبب می شود که پروکسی/کش بار زیادی را برای هر چک کردن بروزرسانی روی سرور ایجاد نکند. توجه داشته باشید که روش های زیادی برای اپتیمایز کردن سرعت یک سایت وجود دارد، از جمله: کدهای جاوا اسکریپت و کم کردن حجم عکس ها؛ اما به کار گرفتن روش های Expiry Headers و ETAGS روش تضمین شده تر و بهتر و البته آسان تری است.
در ادامه نحوه استفاده و مکانیزم عملکرد این دو فاکتور می پردازیم.
عملکرد ETAGS چگونه است؟
سرور بسته های ETAGS را در زمان پاسخ به کاربر تعیین می کند که حالت های زیر پیش می آید:
اولین حالت این است که کاربر برای اولین بار درخواست یک فایل ثابت را به سرور می دهد، مانند: «folder/file.gif». در زیر متن هدری فایلی را مشاهده می کنید که کاربر از سمت سرور دریافت می کند:
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: "10c24bc-4ab-457e1c1f"
Content-Length: 12195
در این فایلی که مشاهده می کنید، ۱۰c24bc-4ab-457e1c1f مربوط به ETAGS است که در سیستم کاربر ذخیره می شود.
حالت دومی که پیش می آید، این است که کاربر فایل قبلی را از سرور درخواست می کند و این مرورگر است که باید بسته را بررسی کند. در این شرایط از If-None-Match Header برای تشخیص دادن تغییر محتوای فایل در سرور استفاده می شود. برای انجام این کار، سرور هدر را بررسی می کند، اگر ETAGS موجود با ETAGS که در سرور وجود دارد، یکی باشند، سرور به عنوان پاسخ کد ۳۰۴ را به عنوان اعلام کردن تغییر نکردن محتوا ارسال می کند و همان فایلی که در کش سیستم کاربر است، فراخوانی می شود.
GET /a/test.gif HTTP/1.1
Host: www.geekride.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: "10c24bc-4ab-457e1c1f"
HTTP/1.1 304 Not Modified
معایب سیستم ETAGS چه مواردی است؟
در تولید ETAGS ها از پارامترهایی استفاده می شود که توسط سرور یکتا و منحصر به فرد هستند. وب سرور apache به صورت پیش فرض، یک ETAG را با استفاده ترکیبی از شماره inode فایل، شروع به تولید آخرین زمان تغییر، زمان ایجاد فایل و … می پردازد. همانطور که می توانید متوجه شوید، ETAGS های متعلق به دو فایل، در صوتی که فایل ها یکی باشند، شماره inode متفاوتی خواهند داشت.
احتمالا می پرسید که مشکل این امر چیست؟ بگذارید با یک مثال به درک بهتر موضوع کمک کنیم. این موضوع زمانی سبب مشکل و اختلال می شود که شما کلاستری از وب سرور برای ارائه یک محتوا داشته باشید. حال تصور کنید که یک فایل از سرور اول نمایش داده می شود و همان فایل مجدد توسط سرور دوم اعتبار سنجی می شود، اگر ETAG یکسانی در سرور از فایل قبلی وجود نداشته باشد، پس فایل مجددا به وسیله مرورگر کاربر از سمت سرور دوم فراخوانی می شود و این به این معنا است که زمانی که کلاستری از وب سرور دارید، استفاده کردن از ETAG بیهوده به نظر می رسد.
ETAG به صورت پیش فرض روی وب سرور فعال است که شما می توانید کد هایی که در زیر برایتان آورده ایم را در فایل کانفیگ وب سرور یا htaccess قرار دهید و آن را غیرفعال کنید.
Header unset
ETagFileETag none
اگر وب سرور شما lighthttpd باشد، باید کد زیر را در فایل کانفیگ این وب سرور قرار دهید.
static-file.etags = 'disable
xpiry Headers چگونه پیاده سازی می شود؟
اگر بخواهید که برای برخی از فایل ها، تاریخی برای انقضای کش تعیین کنید، این موارد در فایل htaccess قرار می گیرند.
۰۱٫# ۱ YEAR
۰۲٫<FilesMatch "\.(ico|pdf|flv)$">
۰۳٫Header set Cache-Control "max-age=29030400, public"
۰۴٫ExpiresDefault "access plus 1 years"
۰۵٫</FilesMatch>
۰۶٫# ۲ MONTHS
۰۷٫<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
۰۸٫Header set Cache-Control "max-age=4838400, public"
۰۹٫ExpiresDefault "access plus 2 months"
۱۰٫</FilesMatch>
۱۱٫# ۱ WEEK
۱۲٫<FilesMatch "\.(xml|txt|css|js)$">
۱۳٫Header set Cache-Control "max-age=604800, public"
۱۴٫ExpiresDefault "access plus 1 weeks"
۱۵٫</FilesMatch>
۱۶٫# ۳۰ MIN
۱۷٫<FilesMatch "\.(html|htm|php)$">
۱۸٫Header set Cache-Control "max-age=1800, private, proxy-revalidate"
۱۹٫ExpiresDefault "access plus 30 minutes"
۲۰٫</FilesMatch>
اگر به این کدها دقت کنید، متوجه می شود که قسمت های مختلفی همراه با زمان در این فایل گنجانده شده است.
تنظیم کردن زمان به صورت ماهیانه یا بیشتر از یک ماه، نه منطقی است نه عملی! چرا که احتمال دارد که در انی بازه محتوای دیتاهایی که بر روی سرور قرار گرفته اند، تغییر پیدا کنند، اما کاربران همان دیتاهای قبلی را بارگذاری کنند.تعیین کردن زمان نیم ساعته نیز باعث می شود که محتوای سایت رفرش شود و لود سایت افزایش پیدا کند که این اتفاق نیز مطلوب نیست.
در کدهایی که در بالا آورده ایم، اگر دقت کنید، چند بخش وجود دارد که هرکدام کاربردی دارد؛ برای مثال در خط اول می توانید هم نوع فایل را و هم طول آن را مشخص کنید. خط دوم مربوط به پارامتر max-age است که کاربرد آن برای تعیین کردن زمان انقضا است که تا این زمان، فایل از کش بارگذاری شود.
خط سوم این کد نیز متعلق به Expiry Headers است که شما در این قسمت می توانید مدت زمانی را که تا موقعی که بخش مورد نظر منقضی نشده است، تعیین می کنید.
در بین کد ها با اصلاح access plus [length of time] مواجه می شوید که به معنای آن است که تاریخ فایل مورد نظر از زمان آخری درخواست به آن منقضی خواهد شد. مدت زمان access plus [length of time] باید با مدت زمان تعریف شده Cache-Control یکی باشد.
با این کدهایی که در اختیارتان قرار دادیم، محتوای موجود به وسیله مرورگر کاربران کش می شود و این موضوع سبب می شود که سرعت سایت افزایش پیدا کند و مصرف پهنای باند کاهش پیدا کند.
سخن آخر
در این مقاله در مورد ETAG ها صحبت کردیم و به شما در مورد عملکرد و نحوه استفاده از آن ها گفتیم. ETAG ها به شما کمک می کنند تا بتوانید هم سرعت سایت خودتان را بیشتر کنید و هم بتوانید پهنای باند را زمانی که کاربر دوباره سایت شما را لود می کنید، کاهش دهید. توصیه می کنیم حتما از ETAG ها استفاده کنید.