Работает ли в Chrome функция «пауза» в диспетчере загрузок?

6

Я пытаюсь загрузить большой файл с помощью Chrome для Mac. Интернет здесь пятнистый. Иногда интернет отключается, или мне нужно приостановить загрузку.

Мне никогда не удавалось возобновить загрузку. Иногда он открыто терпит неудачу, иногда кажется, что он работает, но через 20 минут он в том же месте.

Итак, действительно ли работает функция «паузы»? Эти сторонние менеджеры закачек работают?

Нут
источник

Ответы:

11

Итак, действительно ли работает функция «паузы»?

Да, обычно так и есть.

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

Если размер запрашиваемого файла известен, в заголовке HTTP отображается «Длина содержимого» для вашего браузера.

Например, я пытаюсь загрузить файл PDF, и вот ответ:

charon:~ werner$ curl -I www.ready.gov/business/_downloads/sampleplan.pdf
HTTP/1.1 200 OK
Server: Apache
ETag: "230b73353fc7715f06267967df11be04:1241094925"
Last-Modified: Wed, 29 Apr 2009 20:56:46 GMT
Accept-Ranges: bytes
Content-Length: 293125
Content-Type: application/pdf
Date: Wed, 07 Sep 2011 14:49:33 GMT
Connection: keep-alive

В этом важны поля Content-Lengthи Accept-Rangesполя.

  • Accept-Ranges означает, что вы можете получить доступ к файлу по частям, если это необходимо
  • Content-Length говорит вам весь размер файла

Теперь, когда вы начнете загрузку, ваш браузер загрузит файл как обычно, но он, конечно, также будет отслеживать загруженные байты и сохранять все во временном файле. Если вы затем нажмете «Пауза», соединение будет просто прервано.

Однако, поскольку браузер знает количество загруженных байтов, при нажатии кнопки «возобновить» он может запросить продолжение загрузки файла именно в этот момент с Rangeполем HTTP . Это все объясняется в определениях полей заголовка HTTP 1.1 :

HTTP-запросы на получение с использованием условных или безусловных методов GET МОГУТ запрашивать один или несколько поддиапазонов объекта , а не весь объект, используя заголовок запроса Range, который применяется к объекту, возвращенному в результате запроса.


Хитрость заключается в том, что когда ваше соединение подвержено ошибкам, Chrome может не осознавать, что произошла потеря соединения, поэтому записать неверное количество загруженных байтов или даже не возобновить соединение с сервером. Я не знаю , о Chrome внутренностей сделать это, но это может не быть в состоянии возобновить загрузку , если он не может отправить успешный запрос HTTP.

Согласно этому ответу , Chrome теоретически может считать загрузку завершенной, даже если TCP-соединение было закрыто / прервано вручную. Это объяснило бы «кажется, что оно работает», которое вы описали.

Кроме того, некоторые серверы могут не поддерживать Rangeкоманду, хотя я думаю, что это редко. Некоторые сайты, такие как Rapidshare, не позволяют возобновить некоторые загрузки.

Наконец, вы можете рассмотреть возможность использования менеджера загрузки и посмотреть, решит ли это ваши проблемы. Кроме этого, использование BitTorrent для загрузки файлов, если это возможно, является, вероятно, более безопасным вариантом, чем обычная загрузка HTTP.

slhck
источник
3

Итак, действительно ли работает функция «паузы»?

Нет, это не работает в Google Chrome. (Хорошо, кнопка «Пауза» работает, но выглядит так, как будто внутренняя часть Google Chrome никогда не прекращает загрузку файла, когда вы нажимаете кнопку «Пауза». Кнопка, кажется, вообще ничего не делает. Это можно увидеть, когда потеряно интернет-соединение. ломает гугл хром и браузер не может возобновить).

Для тестирования я написал простую веб-страницу, которая позволяет загружать файлы, а также поддерживает возобновление загрузки. Тестируя приостановленную загрузку с Google Chrome, я обнаружил, что на самом деле браузер позволяет мне нажимать «Пауза» во время текущей передачи, однако нажатие «Возобновить» не отправляет HTTP-запрос (диапазона).

Браузер Firefox, по-видимому, является браузером, который может приостановить передачу и затем возобновить работу через заголовок диапазона HTTP.

Что касается сторонних менеджеров загрузки, я понятия не имею, наверняка найдутся такие, которые смогут приостановить и возобновить загрузку по HTTP.

Томаш Кнопп
источник
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любые посты .
Ramhound
1

Я лично использую wget и много завиваюсь.

$ wget -c website.com/file.zip

Затем, если соединение завершится, просто запустите ту же команду еще раз, и оно продолжится с того места, где оно было прервано. Если wget автоматически не завершает работу с ошибкой соединения, ^ C, и используйте стрелки вверх и просто запустите команду до завершения загрузки. Вы можете установить его в цикле и запускать команду снова и снова [с задержкой], пока она не выдаст 0 код выхода [Success].

curl тоже очень хорош, я часто предпочитаю curl, а не wget, но wget обычно проще, если вы не знаете, что делаете.

Matt
источник