Действительно ли работает функция «паузы» менеджера загрузок Chrome?

Действительно ли работает функция «паузы» менеджера загрузок Chrome?

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

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

Так что, функция "паузы" действительно работает? Работают ли эти сторонние менеджеры загрузок?

решение1

Так работает ли функция «паузы» на самом деле?

Да,обычнооно делает.

Работает это следующим образом: всякий раз, когда вы загружаете файл, вы отправляете 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.

решение2

Так работает ли функция «паузы» на самом деле?

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

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

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

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

решение3

Лично я часто использую wget и curl.

$ wget -c website.com/file.zip

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

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

решение4

Добавляю свой 2c от 2020 года, Chrome 85.0.4183.102

Начал загрузку файла 350 МБ через плохой 4G, но нужна была пропускная способность для других вещей, поэтому остановился на 120 МБ, скорость была около 1-2 МБ/с до этого. Когда я остановился, моя другая веб-активность все еще выглядела как низкая пропускная способность. Когда примерно через 20 минут я возобновил загрузку, она сделала 5..10 огромных скачков со 120 МБ до 350 МБ, и файл был загружен. Так что я подозреваю, что Chrome внутренне все еще загружает.

Связанный контент