وقتی به مبحث If-Range
در پروتکل HTTP میرسیم، مهم است که درک کنیم این یک هدر شرطی است که توسط کلاینتها استفاده میشود تا به سرورها اعلام کند تحت شرایط خاصی بخشی از یک سند را دریافت کنند. برای مثال، وقتی کاربری در حال دانلود فایل بزرگی است و اتصال او قطع میشود، If-Range
به او اجازه میدهد که دانلود را از جایی که متوقف شد، ادامه دهد.
این هدر اغلب با هدر Range
استفاده میشود. اگر شرطی که در If-Range
تعیین شده است درست باشد، سرور تنها محدوده مشخصشده را ارسال میکند، وگرنه کل سند ارسال میشود. این شرط میتواند یک تاریخ Last-Modified
باشد یا یک مقدار ETag
.
بیایید نگاهی به ساختار If-Range
بیندازیم. از این هدر وقتی استفاده میشود که کلاینت میخواهد بخشهایی از محتوا را در صورت عدم تغییر از موارد قبلی دریافت کند. به بیان دیگر، اگر محتوای روی سرور تغییر نکرده باشد، فقط بخشی از محتوا که هنوز دریافت نشده دریافت میشود.
ممکن است به این فکر کنید که چرا چنین چیزی مورد نیاز است؟ خب، این بهینهسازی پهنای باند و افزایش کارایی را برای کاربرانی که با اتصالات ناپایدار یا محدودیتهای زمانی مواجهاند، به همراه دارد. تصور کنید میخواهید فقط تغییراتی را که در یک فایل بوجود آمده دریافت کنید، این رویکرد دقیقاً همان چیزی است که If-Range
فراهم میآورد.
همچنین نحوه برخورد سرور با If-Range
در حالتی که برخی از مقادیر همچون ETag
در هدر موجود نیستند، بستگی به تنظیمات و پیادهسازی سرور دارد که در اسناد RFC 9110 به آن پرداخته شده است. بررسی پیادهسازی صحیح If-Range
میتواند به جلوگیری از دوبارهکاری و استفاده نابهجا از منابع سروری کمک کند.
GET /file.zip HTTP/1.1
Host: www.example.com
If-Range: "123456789"
Range: bytes=1000-2000
در اینجا یک درخواست HTTP برای دریافت فایل file.zip
نشان داده شده است.
• GET /file.zip HTTP/1.1
: این خط درخواست HTTP برای دریافت منابع را نشان میدهد.
• Host: www.example.com
: مشخص میکند که کلاینت به کدام سرور درخواست داده است.
• If-Range: "123456789"
: این هدر شرطی است که بیان میکند اگر ETag
فایل تغییر نکرده باشد، درخواست Range
باید انجام شود.
• Range: bytes=1000-2000
: این هدر درخواست میکند تنها بایتهای 1000 تا 2000 فایل ارسال شود.