Как работают загрузки с паузой?


18

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

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

Ответы:


26

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

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

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

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


FTP также является широко используемым протоколом для передачи файлов. Раньше это было основным средством, хотя сейчас HTTP, вероятно, более распространен.
— ChrisInEdmonton

FTP использует, по сути, ту же конструкцию, хотя мне пришлось бы изучить специфику, прежде чем пытаться реализовать код, который его использует.
— Frank Thomas

1

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


1
Я не уверен, почему этот ответ был отклонен, поэтому я проголосовал за него.
— Ramhound

@FrankThomas, я только что подтвердил некоторые факты с нашим старшим разработчиком, и он сказал, что вы «можете» использовать постоянный cookie или viewstate для хранения индексной информации массива байтов, используемой в tracking & amp; возобновить загрузку через загрузчик на основе браузера, однако это не было хорошей практикой. Как правило, для больших возобновляемых файлов, таких как продукт MS, вы загружаете приложение «Менеджер загрузок», и оно работает так, как вы сказали. Я проголосовал за ваш ответ.
— Josh Campbell

Этот ответ кажется бессмысленным. Это не проблема определения того, сколько файла было загружено; клиент уже знает это Вы можете сообщить об этом обратно на сервер, используя куки, но есть гораздо лучшие подходы. Заголовки, параметры GET или POST и т. Д. Вопрос заключается в том, как возобновить передачу файла, а не в том, как передать информацию на сервер.
— ChrisInEdmonton

ОП спросил, как это работает, и я указал ему в направлении файлов cookie, чтобы он мог провести дальнейшие исследования. Существует дюжина различных способов, которыми разработчик может создать возобновляемый загрузчик. Я бы сделал это с помощью файлов cookie на клиенте для отслеживания состояния загрузки с помощью индекса start-stop и использовал бы C # на бэкэнде, чтобы вычислить, сколько было загружено (из индекса X в индекс Y), а затем возобновлено с Y. Загрузка с рабочего стола Менеджер делает то же самое, только он хранит свою информацию в текстовом файле или базе данных. Это не переполнение стека, я не пишу исходный код.
— Josh Campbell

@JoshCampbell, проблема в том, что ваше решение будет работать только для людей, использующих ваше конкретное клиентское программное и серверное программное обеспечение. Как отмечает Фрэнк в своем ответе, существуют стандартные способы решения этой проблемы, и нет необходимости настраивать один из них. Кроме того, ваш ответ не указывает на процесс, с помощью которого некоторые сайты позволяют OP возобновлять загрузку, и поэтому не отвечает на вопрос. Вот почему я прокомментировал.
— ChrisInEdmonton
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.