အဓိက အကြောင်းအရာ - server
ETag ဆိုသည်မှာ - အင်တာနက်ကြည့်ဆော့ဖ်၀ဲ၏ ခေတ္တသိုလှောင်ခန်း (Browser's Cache) အတွင်း သိမ်းဆည်းထားသည့် ၀က်ဘ်ဆိုက် (Web site) တစ်ခု၏ အစိတ်အပိုင်းများနှင့် ထိုအစိတ်အပိုင်းများ၏ မူလ ဆာဗာ (Original Server) တို့ကြားတွင် ကိုက်ညီ မှန်ကန်မှု ရှိမရှိ မှန်ကန်စွာ ဆုံးဖြတ်နိုင်ရန်အတွက် - ၀က်ဘ်ဆာဗာ (Web Server) များနှင့် အင်တာနက်ကြည့်ဆော့ဖ်၀ဲများ (Web Browsers) ကြားတွင်၊ အသုံးပြုသည့် နည်းစနစ် - တစ်ခုဖြစ်သည်။
ETags ၏ အမည် အပြည့်အစုံမှာ Entity tags ဖြစ်သည်။ Entity ဆိုသည်မှာ - အင်တာနက် စာမျက်နှာများအတွင်း ဖွဲ့စည်းပါရှိနေသည့် ပုံများ၊ Javascripts ဖိုင်များ၊ CSS stylesheets များ စသည့် အစိတ်အပိုင်း (Component) များကို ခေါ်ခြင်းဖြစ်သည်။ ထိုအစိတ်အပိုင်းများကို စစ်ဆေးဆုံးဖြတ်နိုင်ရန် နည်းစနစ်တစ်ခု ထည့်သွင်းပေးလိုသည့် အတွက် ETag များကို သုံးခြင်းဖြစ်သည်။ ဤနည်းလမ်းမှာ - နောက်ဆုံးပြင်ဆင်သည့် ရက်စွဲ (Last-Modified date) ကို အသုံးပြုခြင်းနည်းထက် ပိုမိုကောင်းမွန်ပြီး ပြောင်းလွယ်ပြင်လွယ်ရှိသည်။
ETag တစ်ခုသည် - အင်တာနက် စာမျက်နှာများအတွင်း ပါရှိသည့် အစိတ်အပိုင်းတစ်ခု၏ တိကျစွာသတ်မှတ်ထားသည့် ဗားရှင်း (Specific Version) တစ်ခုကို - အတိအကျ သတ်မှတ်ပေးသည်။ မူလ Web server သည် ETag response header ကို အသုံးပြုပြီး အစိတ်အပိုင်းတစ်ခု၏ ETag ကို သတ်မှတ်ပေးသည်။ အောက်တွင်ဖော်ပြထားသည့် နမူနာ ETag ကို လေ့လာကြည့်ပါ။
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: "10c24bc-4ab-457e1c1f"
Content-Length: 12195
နောင်တစ်ချိန်တွင် အင်တာနက်ကြည့်ဆော့ဖ်၀ဲတစ်ခု အနေဖြင့် အင်တာနက် စာမျက်နှာ အစိတ်အပိုင်း တစ်ခုကို စစ်ဆေးခြင်း (Validation) ပြုလိုသည့်အခါ ETag ကို မူလ ဆာဗာဆီသို့ ပြန်လည်ပေးပို့နိုင်ရန် အတွက် If-None-Match header ကို အသုံးပြုသည်။ အောက်ပါ ဥပမာတွင် - အင်တာနက်ကြည့်ဆော့ဖ်၀ဲနှင့် မူလ ဆာဗာတို့ရှိ ETags များ တူညီခြင်းကြောင့် ဆာဗာထံမှ 304 Status code ပြန်လည်ပေးပို့သည့်အတွက် တောင်းဆိုလိုက်သည့် yahoo.gif ဖိုင်ကို နောက်ထပ်ရယူရန် မလိုတော့ကြောင်း လေ့လာ တွေ့ရှိ ရမည်။
GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: "10c24bc-4ab-457e1c1f"
HTTP/1.1 304 Not Modified
ETag များနှင့်ပတ်သက်သည့် ပြဿနာတစ်ခုမှာ - ၄င်းတို့ကို ဖန်တီးသည့်အခါ သက်ဆိုင်ရာ ၀က်ဘ်ဆိုက်အား လက်ခံအလုပ်လုပ်ပေးနေသည့် ဆာဗာနှင့် သက်ဆိုင်သည့် အချက်အလက်များကို အသုံးပြုခြင်း ဖြစ်သည်။ ထို့ကြောင့် အင်တာနက်ကြည့်ဆော့ဖ်၀ဲတစ်ခုက အစိတ်အပိုင်းတစ်ခုကို ဆာဗာတစ်ခုမှ ရရှိထားပြီး၊ နောင်တစ်ချိန်တွင် ထိုအစိတ်အပိုင်းကို အခြားဆာဗာတစ်ခုမှ စစ်ဆေး(Validation) ရယူသည့်အခါ ETag များ မတူညီသည့် ပြဿနာများ ဖြစ်လာသည်။ ဆာဗာအများအပြား (Clusters of Servers) ဖြင့် ပေါင်းစုဖွဲ့စည်းထားသည့် ၀က်ဘ်ဆိုက်တစ်ခုကို အင်တာနက်ကြည့်ဆော့ဖ်၀ဲ တစ်ခုဖြင့် အသုံးပြုရသည့် အခါတိုင်းတွင် ဤအခြေအနေမျိုးကို မလွဲမသွေ ကြုံရတတ်သည်။ သာမန်အားဖြင့် Apache နှင့် IIS ဆာဗာ နှစ်မျိုးလုံးသည် ဆာဗာအများအပြားဖြင့် တည်ဆောက်ထားသည့် ၀က်ဘ်ဆိုက်များ (We sites with Multiple Servers) တွင် အစစ်ဆေးခံနိုင်သည့် အချက်အလက်များကို သက်ဆိုင်ရာ ETag များတွင် မြုပ်နှံ၊ ထည့်သွင်းပေးနိုင် ကြသည်။
Apache 1.3 နှင့် 2.x တို့တွင် အသုံးပြုသည့် ETag format မှာ inode-size-timestamp ဖြစ်သည်။ သက်ဆိုင်ရာ ဖိုင်တစ်ခုကို ဆာဗာအများအပြားရှိ Directory နေရာ တစ်ခုတည်းတွင် (The same directory across multiple servers) သိမ်းဆည်းထားရှိသည်။ ဖိုင်အရွယ်အစား၊ ခွင့်ပြုချက်၊ အချိန် စသည့် (The same file size, permissions, timestamp, etc.,) အချက်အလက်များအားလုံး တူညီအောင် သိမ်းဆည်း ထားရှိသည်။ ၄င်း၏ Inode သည်သာ ဆာဗာတစ်ခုမှ နောက်တစ်ခုဆီသို့ ခြားနားသွားသည်။
IIS 5.0 နှင့် 6.0 တွင်လည်း အလားတူ ETags များကို ထုတ်ပေးသည်။ IIS ဆာဗာများရှိ ETags format မှာ - Filetimestamp:ChangeNumber ဖြစ်သည်။ ChangeNumber တစ်ခုသည် counter တစ်ခုဖြစ်ပြီး၊ IIS တွင် ပြောင်းလဲလိုက်သည့် အပြင်အဆင်များကို ခြေရာခံခြင်း (Tracking configuration) ပြုနိုင်ရန် အသုံးပြုသည်။ ChangeNumber သည် ၀က်ဘ်ဆိုက် (Web site) တစ်ခု၏ နောက်ဘက်တွင် ရှိနေသည့် IIS server များအားလုံးတွင် အတူတူဖြစ်သည်။
အင်တာနက် စာမျက်နှာတစ်ခု၏ တူညီသော အစိတ်အပိုင်း တစ်ခုတည်းကိုပင် Apache နှင့် IIS တို့မှ ထုတ်ပေးလိုက်သည့် ETags များ၏ အဆုံးသတ် ရလာဒ်မှာ မတူညီကြသည့် အတွက် ပြဿနာများ ဖြစ်ပေါ်လာရသည်။ အကယ်၍ ETags များမတူညီလျင်၊ user များ၏ အင်တာနက်ကြည့် ဆော့ဖ်၀ဲများတွင် ETag များအတွက် အထူးပုံစံထုတ်ထားသည့် အရွယ်အစားသေးငယ် လျင်မြန်ပေါ့ပါးသည့် 304 Response ကို မရရှိတော့ပေ။ ထို 304 Response အစား၊ အစိတ်အပိုင်းများ အားလုံးနှင့် သက်ဆိုင်သည့် အချက်အလက်များကို ပေးပို့ရန် သတ်မှတ်ထားသည့် ရိုးရိုးသာမန် 200 Response ကိုသာ ရရှိကြတော့သည်။
အကယ်၍ ကျွန်တော်တို့က Web site တစ်ခုကို Apache သို့မဟုတ် IIS ဆာဗာတစ်ခုတည်းတွင်သာ ထားရှိ တည်ဆောက်ထားပါက ETag ကွဲလွဲခြင်း ပြဿနာကို ကြုံရမည် မဟုတ်ချေ။ သို့သော် ၀က်ဘ်ဆိုက်တစ်ခု ဆာဗာများစွာပေါ်တွင် ထားရှိ တည်ဆောက်ထားပြီး၊ Apache သို့မဟုတ် IIS ဆာဗာများကို Default ETag Configuration များဖြင့်သာ အသုံးပြုနေပြီ ဆိုပါလျင် -
သင့်၀က်ဘ်ဆိုက်ရှိ အစိတ်အပိုင်းများတွင် far future Expires header တစ်ခုစီကို သုံးထားသည့်တိုင်အောင်၊ User တစ်ဦးက ၄င်း၏ အင်တာနက်ကြည့်ဆော့ဖ်၀ဲရှိ Refresh သို့မဟုတ် Reload ခလုတ်ကို နှိပ်လိုက်တိုင်း conditional GET request တစ်ခုကို ပြုလုပ်နေဆဲ ဖြစ်သည်။
အကယ်၍ ETags များက ပေးသည့် Flexible Validation Model (ပြောင်းလွယ်ပြင်လွယ်သည့် စစ်ဆေးမှု ပုံစံ) ၏ အားသာချက်များကို ကောင်းစွာ အသုံးမချနိုင်ပါက၊ အကောင်းဆုံးနည်းလမ်းမှာ ETag များကို မသုံးတော့ဘဲ ဖယ်ထုတ်ထားခြင်း ဖြစ်သည်။ သက်ဆိုင်ရာ အစိတ်အပိုင်း၏ အချိန်မှတ်သားချက် (Timestamp) ကို အခြေခံပြီး Last-Modified header များက စစ်ဆေး အလုပ်လုပ်သွားမည် ဖြစ်သည်။
ETags များကို ဖယ်ထုတ်လိုက်သည့် အတွက် HTTP response များနှင့် မကြာခဏ ပြုလုပ်ကြသည့် တောင်းဆိုမှုများ (Subsequent Requests) များတွင် သုံးကြရသည့် HTTP header များ၏ အရွယ်အစားကိုလည်း လျော့ချပေးနိုင်သည်။ Microsoft IIS ဆာဗာ များတွင် ETag များကို ဖယ်ထုတ်နိုင်သည့် နည်းလမ်းကို 2006 ခုနှစ် Microsoft မှ ရေးသားထားသည့် "The performance of a Web application may decrease.." http://support.microsoft.com/?id=922733 အစရှိ ဆောင်းပါးတွင် သွားရောက် ဖတ်ရှုနိုင်သည်။ Apache ဆာဗာအတွက်ဆိုလျှင် အောက်ပါအတိုင်း Apache Configuration ဖိုင်အတွင်း ထည့်သွင်းရေးသားပေးရုံသာ ဖြစ်လေသည်။
FileETag none
REF - http://developer.yahoo.com/performance/rules.html#etags
For more information
1. How to disable ETags in IIS6
2. Removing ETags from IIS 5.0 to a Web farm by Microsoft
Add new comment