در دنیای وب، یکی از مهمترین مفاهیم مربوط به عملکرد و بهینهسازی شبکه، مفهوم ETag است. ETag یا "Entity Tag" به نوعی شناسهی منحصربهفرد برای نسخهی یک منبع در شبکه است. این شناسه به سرور کمک میکند تا از تغییر یا عدم تغییر یک فایل آگاهی پیدا کرده و بسته به نیاز، محتوای جدید یا کش شده را ارائه دهد.
ETagها به ما اجازه میدهند تا زمانی که تغییری در یک منبع ایجاد نشده است، آن را از کش بارگذاری کنیم و به این ترتیب مداخله در سرعت بارگذاری محتوا بهبود پیدا میکند. هر بار که یک فایل تغییر کند، ETag آن نیز بهروز میشود.
با توجه به RFC 9110، ETagها میتوانند به دو صورت ضعفدار و بدون ضعف باشند. نسخهی ضعفدار زمانی استفاده میشود که تغییرات کوچک و جزئی در فایل وجود داشته باشد که نیازی به بارگذاری مجدد محتوا به صورت کامل نباشد. اما نسخهی بدون ضعف برای زمانی است که تغییرات پر اهمیتتر بوده و نیاز به بارگذاری کامل محتوا داریم.
استفادهی صحیح از ETagها میتواند تاثیر بسزایی روی کارایی اپلیکیشنهای وب ما داشته باشد. به این صورت که میتوانیم از ارسالهای غیر ضروری اطلاعات از سرور به مرورگر جلوگیری کنیم و بدین ترتیب هم در پهنای باند و هم در زمان پاسخدهی صرفهجویی کنیم.
در اینجا مثالی از نحوه کار با ETag در کد نشان داده میشود:
HTTP/1.1 200 OK
ETag: "688247d06a4a123"
Cache-Control: max-age=3600
If-None-Match: "688247d06a4a123"
خط اول: HTTP/1.1 200 OK
پاسخی که نشان میدهد درخواست با موفقیت انجام شده است.
خط دوم: ETag: "688247d06a4a123"
نشانگر نسخه فعلی منبع، که سرور به مرورگر اعلام میکند.
خط سوم: Cache-Control: max-age=3600
تعیین مدت زمان اعتبار کش به مدت 3600 ثانیه (یک ساعت).
خط چهارم: If-None-Match: "688247d06a4a123"
بررسی میکند که آیا ETag تغییر کرده یا نه، اگر تغییر نکرده باشد از کش استفاده میشود.