فشردهسازی و هدرهای 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, br | GZIP | پاسخ فشردهشده با GZIP را همراه با ETag قوی میفرستد:etag: foobar |
| gzip, br | Brotli | پاسخ فشردهشده با Brotli را همراه با ETag قوی میفرستد:etag: foobar |
| br | GZIP | از حالت GZIP خارج میشود و پاسخ فشردهشده با Brotli را همراه با ETag ضعیف میفرستد:etag: W/foobar |
| gzip | Brotli | پاسخ فشردهشده با Brotli را همراه با ETag قوی میفرستد:etag: foobar |
| gzip | بدون فشردهسازی | پاسخ فشردهشده با GZIP را همراه با ETag ضعیف میفرستد:etag: W/foobar |
| br | بدون فشردهسازی | پاسخ فشردهشده با Brotli را همراه با ETag ضعیف میفرستد:etag: W/foobar |
| gzip, br | بدون فشردهسازی | پاسخ فشردهشده با Brotli را همراه با ETag ضعیف میفرستد:etag: W/foobar |
توجه داشته باشید که اگر سرور اصلی پاسخ را از پیش فشرده کرده باشد و کلاینت دقیقن همان الگوریتم فشردهسازی را خواسته باشد، سرور لبه پاسخ را دستنخورده عبور میدهد و ETag قوی را نگه میدارد.