محتوای آموزشی وبلاگ نتآرام
فرض کنید یک فایل را تا نیمه دانلود کردهاید و اینترنت قطع میشود. وقتی دوباره به اینترنت وصل میشوید، دوست دارید دانلود از همانجا ادامه پیدا کند؛ نه اینکه هرچه گرفتهاید دور ریخته شود و فایل از اول دانلود شود. اگر فایلهایتان را روی هاست دانلود میگذارید، همین اتفاق ساده یکی از چیزهایی است که ارزش دارد خودتان امتحان کنید.
در این آموزش یک فایل حدوداً یکمگابایتی میسازیم، بخشی از آن را دانلود میکنیم و بعد دانلود را ادامه میدهیم. در پایان هم بررسی میکنیم فایل بهدستآمده دقیقاً همان فایل اولیه باشد. لازم نیست برای این آزمایش، فیلم چندگیگابایتی یا فایل واقعی مشتریان را دانلود کنید.
اول بدانیم «ادامهٔ دانلود» چطور کار میکند
وقتی دانلود قطع میشود، مقداری از فایل روی کامپیوتر شما باقی میماند. برنامهٔ دانلود میتواند به سرور بگوید: «این مقدار را قبلاً گرفتهام؛ بقیهاش را بفرست.» اسم فنی این درخواست Range است؛ یعنی درخواست یک قسمت مشخص از فایل.
اگر سرور آن قسمت را بفرستد، معمولاً پاسخ ۲۰۶ میدهد. این عدد علامت خطا نیست؛ یعنی بخشی از فایل با موفقیت ارسال شده است. پاسخ ۲۰۰ هم معمولاً یعنی کل فایل ارسال شده. برای بررسی پشتیبانی واقعی، باید درخواست ادامهٔ دانلود را اجرا کنیم؛ دیدن یک گزینه در پنل یا نام یک هدر کافی نیست. توضیح درخواست بخشی از فایل در MDN
یک فایل ساده برای آزمایش آماده کنید
این مثال را با ویندوز انجام میدهیم. یک پوشهٔ تازه بسازید؛ مثلاً
کد / دستورdownload-check روی دسکتاپ. داخل پوشه، روی فضای خالی کلیک راست کنید و گزینهٔ بازکردن ترمینال را بزنید. اگر ترمینال شما PowerShell است، دستور زیر را وارد کنید:Set-Content -Path .\range-test.bin -Value ('Netaram test file. ' * 60000) -Encoding ascii
فایلی به نام
range-test.bin در همان پوشه ساخته میشود. این فایل فقط متن تکراری دارد و کمی بیشتر از یک مگابایت است. فایل را با File Manager پنل هاست دانلودتان در پوشهای عمومی بارگذاری کنید. بعد آدرس مستقیمش را در مرورگر باز کنید؛ باید فایل دانلود شود، نه اینکه صفحهٔ ورود یا صفحهٔ خطا ببینید.در دستورهای پایین، آدرس کد / دستور
https://downloads.example.com/range-test.bin نمونه است. آن را با آدرس همان فایل روی هاست خودتان عوض کنید. فایل اولیهٔ داخل پوشه را هم نگه دارید؛ در پایان برای مقایسه به آن نیاز داریم.اگر با ساختن فایل یا پیدا کردن آدرس مستقیمش آشنا نیستید، همین دو مرحله را با کمک پشتیبانی انجام دهید. داشتن یک فایل عمومی و آدرس درست آن، پیشنیاز باقی آزمایش است.
دانلود را عمداً نیمهکاره میگذاریم
در همان پنجرهٔ PowerShell، این دستور را اجرا کنید:
کد / دستورcurl.exe --limit-rate 20k --max-time 5 --max-filesize 3145728 -H "Accept-Encoding: identity" -o .\download-test.bin "https://downloads.example.com/range-test.bin"
اینجا
curl.exe ابزار دریافت فایل است. سرعت را عمداً پایین آوردهایم و گفتهایم بعد از پنج ثانیه متوقف شود؛ چون یک فایل کوچک روی اینترنت سریع ممکن است فرصت قطعکردن دانلود را به ما ندهد. فایل دریافتشده با نام جداگانهٔ download-test.bin ذخیره میشود تا فایل اولیه جایگزین نشود.احتمالاً پیام کد / دستور
Operation timed out میبینید. در این مرحله این پیام انتظار ماست: خودمان محدودیت پنجثانیهای گذاشتهایم. فایل download-test.bin باید ساخته شده باشد و اندازهاش از فایل اولیه کمتر باشد. اگر فایل خالی است یا خطای ۴۰۴ میبینید، اول آدرس و دسترسی فایل را بررسی کنید؛ هنوز به مرحلهٔ ادامهٔ دانلود نرسیدهایم.گزینهٔ
identity از سرور میخواهد فایل را بدون فشردهسازی اضافی HTTP بفرستد تا مقایسه ساده باشد. سقف حجم هم سه مگابایت است و برای فایل کوچک ما کافی است. راهنمای گزینههای curlحالا بقیهٔ همان فایل را دریافت کنید
فایل نیمهکاره را حذف نکنید. دستور زیر را با همان آدرس اجرا کنید:
کد / دستورcurl.exe -C - --max-time 60 --max-filesize 3145728 -H "Accept-Encoding: identity" -o .\download-test.bin "https://downloads.example.com/range-test.bin"
قسمت
-C - به curl میگوید اندازهٔ فایل موجود را بررسی کند و دریافت را از همان نقطه ادامه دهد. این بار دانلود باید کامل شود. اگر پیامی دربارهٔ پشتیبانینشدن ادامهٔ دانلود یا byte ranges دیدید، یعنی این درخواست از مسیر فعلی موفق نشده است؛ لازم است تنظیمات سرور یا مسیر ارائهٔ لینک بررسی شود.برای اطمینان از نتیجه، این دو دستور را اجرا کنید:
کد / دستورGet-FileHash .\range-test.bin -Algorithm SHA256
Get-FileHash .\download-test.bin -Algorithm SHA256
کنار هر نام فایل، یک رشتهٔ طولانی میبینید. این رشته را میتوان مثل اثر انگشت محتویات فایل در نظر گرفت. اگر دو رشته دقیقاً یکسان باشند، فایل دانلودشده با نسخهای که ساخته و بارگذاری کردهاید یکسان است. صرفاً برابر بودن اندازهٔ دو فایل، این اطمینان را نمیدهد.
اگر فایل روی هاست عوض شود چه؟
تا اینجا فرض کردیم محتوای فایل ثابت مانده است. اگر وسط دانلود، فایل تازهای را با همان نام جایگزین کنید، بخش ذخیرهشده روی کامپیوتر کاربر متعلق به نسخهٔ قدیمی خواهد بود. نباید بقیهٔ نسخهٔ تازه را به آن بچسبانیم و انتظار یک فایل سالم داشته باشیم.
برای فایلهایی که مرتب بهروزرسانی میشوند، روش سادهتر این است که نام یا آدرس نسخهها متفاوت باشد؛ مثلاً
course-v1.zip و course-v2.zip. لینک قدیمی را هم تا زمانی که لازم است نگه دارید. این کار به کاربر و برنامهٔ دانلود کمک میکند نسخهها را با هم اشتباه نگیرند.در تنظیمات پیشرفتهتر، سرور شناسهای به نام
ETag برای نسخهٔ فایل میفرستد. برنامهٔ دانلود میتواند با If-Range بگوید: «فقط اگر فایل هنوز همان نسخه است، ادامهاش را بده.» اگر نسخه عوض شده باشد، دریافت کامل فایل تازه لازم میشود. دستور سادهٔ ادامهٔ دانلود در بالا، این بررسی نسخه را اضافه نمیکند؛ بنابراین هنگام آزمایش، فایل را روی هاست تغییر ندهید. توضیح بررسی نسخه با If-Rangeبا نتیجه چه کار کنیم؟
اگر دانلود ادامه پیدا کرد و اثر انگشت دو فایل برابر بود، قابلیت ادامهٔ دانلود برای همین فایل و همین لینک درست کار کرده است. این نتیجه هنوز سرعت دانلود کاربران یا تحمل هزار دانلود همزمان را ثابت نمیکند؛ آنها آزمایشهای جداگانه میخواهند.
اگر فایل با لینک مستقیم ادامه پیدا میکند اما با لینک سایت شما نه، همان لینک نهایی را بررسی کنید. ممکن است لینک زماندار منقضی شده باشد یا فایل از یک سرویس واسطه عبور کند. در درخواست پشتیبانی، آدرس فایل آزمایشی، متن خطا و زمان آزمایش را بفرستید تا مشکل قابل تکرار باشد.
برای انتخاب هاست دانلود، این آزمایش به شما یک معیار عملی میدهد: آیا فایل کاربران بعد از قطع ارتباط ادامه پیدا میکند و سالم به دستشان میرسد؟ اگر از CDN استفاده میکنید، آزمایش را با لینکی انجام دهید که واقعاً در اختیار کاربر میگذارید؛ دربارهٔ این سرویس هم در راهنمای سادهٔ CDN توضیح دادهایم.
برچسبها:
اشتراکگذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
