پرش به مطلب اصلی

فشرده‌سازی و هدرهای ETag

هدر ETag شناسه‌ای است که مشخص می‌کند نسخه‌ی کش‌شده‌ی یک فایل در مرورگر کاربر با نسخه‌ی موجود در سرور اصلی (Origin) یکسان است یا خیر. مرورگر در هر بازدید دوباره، مقدار ETag ذخیره‌شده را به سرور می‌فرستد؛ اگر هم‌خوانی داشت، سرور پاسخ ۳۰۴ (Not Modified) را برمی‌گرداند و جلوی دانلود دوباره‌ی فایل را می‌گیرد. شبکه‌ی توزیع محتوا (CDN) آروان‌کلاد از هر دو نوع ETag قوی و ETag ضعیف پشتیبانی می‌کند.

ETag قوی، بدون پیشوند W/، نشان می‌دهد فایل کش‌شده در مرورگر کاربر و فایل روی سرور اصلی بایت‌به‌بایت با هم یکسان‌اند؛ مثلن etag: foobar. در مقابل ETag ضعیف با پیشوند W/ می‌آید؛ مثلن etag: W/foobar و نشان می‌دهد فایل از نظر معنا و محتوا با نسخه‌ی سرور یکسان است، اما بایت‌های آن، مثلن به‌دلیل فشرده‌سازی در سرور لبه، ممکن است متفاوت باشند.

زمانی که کلاینت درخواستی با هدر Accept-Encoding می‌فرستد، سرور لبه‌ی CDN الگوریتم فشرده‌سازی درخواستی کلاینت را با الگوریتمی که سرور اصلی برای پاسخ به‌کار برده مقایسه می‌کند. اگر هم‌خوان بودند، سرور لبه پاسخ سرور اصلی را دست‌نخورده و همراه با ETag قوی می‌فرستد. اگر نه، سرور لبه پاسخ را با الگوریتم دیگری فشرده می‌کند یا اگر سرور اصلی پاسخی فشرده‌نشده فرستاده باشد، خودش آن را فشرده می‌کند؛ در این حالت‌ها، چون بایت‌های پاسخ نسبت به پاسخ سرور اصلی فرق می‌کنند، سرور لبه ETag را به‌شکل ضعیف می‌فرستد.

جدول زیر رفتار سرور لبه را برای ترکیب‌های مختلف Accept-Encoding کلاینت و فشرده‌سازی سرور اصلی نشان می‌دهد:

Accept-Encoding کلاینتفشرده‌سازی سرور اصلیرفتار سرور لبه
gzip, brGZIPپاسخ فشرده‌شده با GZIP را همراه با ETag قوی می‌فرستد:
etag: foobar
gzip, brBrotliپاسخ فشرده‌شده با Brotli را همراه با ETag قوی می‌فرستد:
etag: foobar
brGZIPاز حالت GZIP خارج می‌شود و پاسخ فشرده‌شده با Brotli را همراه با ETag ضعیف می‌فرستد:
etag: W/foobar
gzipBrotliپاسخ فشرده‌شده با Brotli را همراه با ETag قوی می‌فرستد:
etag: foobar
gzipبدون فشرده‌سازیپاسخ فشرده‌شده با GZIP را همراه با ETag ضعیف می‌فرستد:
etag: W/foobar
brبدون فشرده‌سازیپاسخ فشرده‌شده با Brotli را همراه با ETag ضعیف می‌فرستد:
etag: W/foobar
gzip, brبدون فشرده‌سازیپاسخ فشرده‌شده با Brotli را همراه با ETag ضعیف می‌فرستد:
etag: W/foobar

توجه داشته باشید که اگر سرور اصلی پاسخ را از پیش فشرده کرده باشد و کلاینت دقیقن همان الگوریتم فشرده‌سازی را خواسته باشد، سرور لبه پاسخ را دست‌نخورده عبور می‌دهد و ETag قوی را نگه می‌دارد.