امروزه سرعت تبدیل به یک فاکتور بسیار مهم در هر فرآیندی شده است، به بیان دیگر در شرایطی که یک فرآیند از سرعت بیشتر و پایداری بهتری نسبت به دیگری برخوردار باشد، به عنوان یک مرجع و اصل تلقی می شود و الگو پذیر می باشد. این مورد در زمینه فناوری اطلاعات به خصوص در world wide web به خوبی نمود پیدا می کند، به همین دلیل از مهمترین عوامل رتبه دهی به سایت ها، سرعت لود آن ها می باشد. حال زمانی که مبحث سرعت یک وبسایت و یا وب سرور مطرح است، ETAGS و Expiry headers دو آیتم اصلی بشمار می آیند که نیاز به بررسی دارند. برای شناسایی محتوا توسط سیستم کاربران (مرورگر) به منظور دریافت و به روز رسانی آخرین فایل های موجود روی سایت می باشد. اما این دو فاکتور تفاوت های دارند که در زیر به آنها می پردازیم.
ETAGs مخفف عبارت Entity Tags می باشد یعنی Etag یک فایل هدر (سرآمد) می باشد که در نسخه HTTP.1.1 معرفی شده است. ETAGs ها شباهت زیادی به validators ها ( اعتبار سنج ها ) دارند، که آنها هیچگونه اطلاعاتی در مورد اینکه کاربر بتواند تعیین کند که چه اطلاعاتی به روز شوند و یا درخواستی دوباره برای یک فایل ایجاد نماید. به عنوان مثال اگر سرعت لود سایت بیش از 20 ثانیه باشد، ممکن است شما از بازدید این وبسایت منصرف شوید و به وبسایت دیگری مراجعه کنید. بنابراین بهبود و افزایش سرعت یک وبسایت نه تنها برای حفظ کاربران و بازدیدکنندگان مهم است، بلکه این امر می تواند در صرفه جوی مقدار زیادی از پهنای باند کمک نماید. حتی زمان بارگذاری وب سایت، رابطه مستقیمی با پایداری سرور دارد، به نوعی زمان زیاد باعث خاموش شدن و به اصطلاح دان تایم می شود.
ETAG شبیه یک checksum است، که بعد از تغییر در محتوای یک فایل، آن نیز دچار تغییر می شود. وقتی که کاربر درخواست یک فایل را می دهد، مرورگر کاربر به سمت سرور هدایت خواهد شد و به ETAG یک فایل در سرور، درخواست بررسی را می دهد ایا این فایل در کش کاربر موجود می باشد یا خیر، بعد از آن سرور، ETAG ارسالی را بررسی می کند که این ETAG با ETAG موجود روی سرور مطابقت دارد یا خیر. اگر ETAG یکسان بود.
سرور وضعیت HTTP 304 را به عنوان پاسخ به مرورگر کاربر ارسال می کند که به معنی تغییر داده نشده است، که بیان می دارد کاربر میتواند از فایل کش شده در سیستم خود استفاده نماید. از طرف دیگر اگر ETAG ارسال شده توسط کاربر با ETAG موجود روی سرور متفاوت باشد، سرور وضعیت HTTP 200 را به عنوان پاسخ به این درخواست بازمی گرداند و آخرین فایل موجود را به کاربر ارسال می کند. در واقع کاربر آخرین فایل را بارگذاری می کند.
Expiry Headers چیست؟
Expiry Headers برای زمانی است که شما نمی خواهید کاربران برای هر بررسی فایل و بروزرسانی آنها یک درخواست به سمت سرور ارسال کنند، به بیان دیگر در ETAG کاربر برای به روز رسانی ها با سرور ارتباط برقرار می کند و برای هر فایل و محتوا، درخواستی ارسال می نماید، اما در Expiry headers سرور زمان انقضای اطلاعات یک فایل را میداند و در بازه ای که زمان آن منقضی شده است برای بروزرسانی فایل های کش شده در سیستم کاربر اقدام میکند، به همین دلیل پروکسی/کش بار زیادی برای هر بار چک کردن بروزرسانی ها روی سرور ایجاد نخواهد کرد.
راه های زیادی برای بهبود سرعت یک سایت مثل استفاده از ترکیب کدهای جاوا اسکریپت و کاهش حجم عکس های وجود دارد، اما خیلی از راه های موجود همانند بکارگیری ETAGS و Expiry Header آسان نمی باشند.
فرایند کاری ETags
سرور مبداء تعیین کننده بسته های ETag در هنگام پاسخ به کاربر می باشد که یکی از دو حالت زیر می باشد.
- کاربر برای اولین بار درخواست فایل به سرور می دهد.
- در درخواست های بعدی، زمانی که کاربر همان فایل را از سمت سرور درخواست می کند، مرورگر باید این بسته را بررسی نماید در این حالت از If-None-Match Header برای تشخیصی تغییر محتوای فایل در سرور استفاده می شود، بدین منظور که این هدر توسط سرور بررسی می شود اگر ETAG موجود در هدر با ETAG موجود در سرور مشابه بود، سرور در پاسخ کد ۳۰۴ را به عنوان عدم تغییر در محتوا ارسال می کند و همان فایل موجود در کش سیستم کاربر فراخوانی می شود.
در بهره برداری ار Etag مشکلی نیز وجود دارد و آن این است که آنها با استفاده از پارمترهایی تولید می شوند که توسط سرور یکتا و منحصر به فرد می باشند. به طور پیشفرض وب سرور Apache یک ETag را با استفاده از ترکیبی از شماره inode فایل، آخرین زمان تغییر، زمان ایجاد فایل و ایجاد می نماید. بنابراین ETAG های دو فایل در صورتی که فایل ها یکسان باشند شماره inode یکسانی نخواهند داشت و مختلف خواهند بود.
• آیا امکان استفاده همزمان از ETAGS وExpiry headers وجود دارد؟
پاسخ مثبت است این امکان وجود دارد که از هر دو در یک زمان بهره برداری شود. وقتی که از Expiry header استفاده می کنید، تاریخ انقضای آن را با توجه به زمان های ثابتی که فایل تغییر می کنند، تنظیم نمایید. و زمانی که از ETAGS از سمت کاربر به سرور ارسال می شود، سریعتر می توان تشخیص دهد که چه اطلاعاتی تغییر کرده و نیاز به بروزرسانی می باشد، به طور کلی ترکیب هر دو موثر است.
• به چه علت نمی توان از ETAGs در سیستم های لود بالانسینگ و کلاسترها بهره گرفت؟
زمانی که شما از چند سرور به عنوان وب سرور برای لود بالانسینگ استفاده می نمایید، به دلیل اینکه الگوریتم تولیدی Etags با استفاده از شماره Inode فایل تولید می شود، می توان در پیکربندی Apache استفاده نکردن از شماره Inode به عنوان الگوریتم تولیدی را غیر فعال کرد اما باید توجه داشت که منطقه زمانی سرور ها یکسان باشند، اما در نهایت استفاده از این تکنیک در لود بالانسینگ پیشنهاد نمی شود.
• در چه زمانی نیاز می شود که از Expiry Headers یا ETAGs استفاده کرد؟
هنگامی که نتوانید زمان تغییر محتوای موجود را پیش بینی کنید، بهتر است که از ETAGs استفاده نمایید تا نیاز نباشد که بصورت دوره ای اطلاعات را بروز نمایید.