18

Я использую Internet Download Manager (IDM) для загрузки данных, и я заметил, что в своем окне прогресса загрузки он показывает, может ли загрузка приостанавливаться (возобновляться). Как правило, сайты обмена файлами не позволяют возобновить передачу, если соединение разорвано.

Таким образом, вопрос заключается в следующем: как это работает? Это какой-то конфиг, который сделан на сервере? Чем это отличается от торрент-загрузок, где загрузка всегда возобновляема.

2 ответа2

26

С точки зрения кодирования загрузка - это просто массив байтов, включенный в поток ответов HTTP.

Протокол HTTP 1.1 (см. Стр. 30) включает в поле заголовка поле Range, которое позволяет запросу указывать смещение в байтах и длину запрашиваемого ответа.

По сути, вы можете сказать: «Дайте мне объект HTTP по этому URL, но я хочу только 1024–4096-й его байты». Затем клиентский браузер добавляет поток байтов к части файла, уже загруженной. Клиент может определить, где он должен возобновить работу, просто проверив длину уже загруженного файла и увеличивая его, чтобы определить требуемое смещение.

Что касается того, как ваш менеджер загрузок может сказать, он отправляет HTTP-запрос "HEAD". Если код ответа - 206 (частичное содержимое), то поток http поддерживает возобновление.

1

Это может быть обработано с помощью постоянного файла cookie, его нельзя путать с файлом cookie сеанса, или вы можете использовать [Viewstate], если сайт построен на ASP.NET, однако это не очень хорошая практика. Фрэнк Томас имеет лучший ответ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .