امروز داشتم روی یک پروژه کار میکردم که توی اون باید تعداد دفعه ای که یک لینک دانلود استفاده شده رو ذخیره میکردم و نمیذاشتم لینک از یه تعداد مرتبه بیشتر (مثلا ۱۰ مرتبه) استفاده بشه. خب قابلیت پیاده سازی شد و همه چیز به نظر درست میرسید. مرورگر لینک رو دانلود میکرد و شمارنده یکی اضافه میشد. اما متوجه شدیم که وقتی برای دانلود از اینترنت دانلود منیجر استفاده میکنیم شمارنده درست کار نمیکنه. بعد از بررسی فهمیدم که دانلود منیجر به طور همزمان چند ریکوئست رو ارسال میکنه تا سرعت دانلود بیشتری رو داشته باشه. در واقع توی هر ریکوئست قسمت مشخصی از فایل رو دانلود میکنه. با استفاده از فیلد Range در header ها میتونیم از این قابلیت استفاده کنیم. عملا وقتی یک دانلود رو نگه میدارید و دوباره اون رو resume میکنید، پشت صحنه این فیلد پر میشه. برای مثال اگر بخوایم از بایت ۱۰۰ تا ۲۰۰ یک فایل رو دانلود کنیم این فیلد در هدر به صورت زیر پر میشه:
Range: bytes=100-200
در حال حاضر راه حلی که من در دست دارم غیر فعال کردن این دانلود های موازیه که البته قابلیت pause و resume کردن رو هم از بین میبره. پس شما هم اگر با این مشکل مواجه شدید باید بین شمارش کاملا دقیق و یا قبلیت ادامه دادن دانلود یکی رو انتخاب کنید. البته که من هنوز دنبال یک راه بهتر هستم و سعی میکنم اگر چیزی پیدا کردم همینجا با شما به اشتراک بذارم.
راه حل من:
من همون قابلیت resume رو برای دانلود منیجر بستم. شما اگر توی پاسختون هدری به صورت "Accept-Ranges" ":" none بفرستید دانلود منیجر به صورت خودکار فقط یک کانکشن برقرار میکنه. امیدوارم این مطلب بهتون کمک کرده باشه