Евген пишет:А вот такой заголовок Range , не поможет ?
Как раз об этом я и написал 
Но такой вариант проходит только с серваками, поддерживающими обработку запроса 206. В ином случае - качать блочно не получится. Т.е скрипт будет висеть и ждать полной загрузки.
Теперь объясню подробнее.
В идеальном случае общение качалки с сервером проходит по принципу (очень урезал для упрощения)
Этап 1: Просто скачка
Качалка: GET имя_файла
Сервер: 200 OK + поток содержимого
и пошло поехало - качалка тащит весь поток к себе. В случае с XmlHttp и ServerXmlHttp - мы не получим возврата к выполнению кода до тех пор, пока сам объект не загрузит всё тело. (Флаг асинхронности тут совершенно ничего не даст.)
В случае WinHttpRequest - в событии DataArriaval мы получим блоки, которые потихоньку возвращаются с сервака.
Но вот допустим оборвалась скачка. А мы пол файла уже выкачали.
Обидно до невозможности. В этом случае УМНАЯ качалка начинает этап 2.
Этап 2: докачка
Качалка: запрашивает Range a-b
Т.е просит - дай мне блок с a(допустим с десятого) байта и длиной b (допустим 100 байт)
И теперь качалка ждёт ответа. Но дальше есть 2 варианта. Если сервер докачку держит, то он ответит статусом 206 Partial Content и блоком данных. А если нет, то он гад эдакий ответит так же как в этапе 1 (200 OK) и всем телом файла. И тогда бедной качалке придётся удалить, всё что она накачала и начать скачку заново. )
Именно поэтому Range нам и не поможет. )
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !