+  HandyCache форум
|-+  Главная категория» Новые предложения» Докачка файлов и загрузка по частям
Имя пользователя:
Пароль:
Страниц: 1 ... 3 4 [5] 6 7   Вниз
  Отправить эту тему    Печать  
Автор Тема: Докачка файлов и загрузка по частям  (Прочитано 129051 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Михаил
Gold beta tester
*****

Репутация: +308/-14
Offline Offline

Сообщений: 5444



« Ответ #80 : 23 декабря 2007, 01:15:02 »

Если получен запрос с "Range: bytes=...", и файл отдается из кэша, то хорошо бы отдавать лишь нужный кусок с ответом 206. Сейчас отдается весь файл с ответом 200.
Добавлено: 23 Декабря 2007, 00:43:21

Вижу, что при запросе с Range IMS не вставляется. Почему? Получается, тянем из сети то, что можем выдать из кэша.
Сообщить модератору   Записан
mai62
Автор HC
*****

Репутация: +222/-4
Offline Offline

Сообщений: 6357


« Ответ #81 : 23 декабря 2007, 01:23:34 »

Согласен, надо как-нибудь добраться.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +308/-14
Offline Offline

Сообщений: 5444



« Ответ #82 : 23 декабря 2007, 01:36:03 »

Заметил один связанный с этим баг. У меня между НС и удаленным сервером стоит Proxomitron, разжимающий приходящие gzip-ответы. У соседа его нет. Кэш общий. Сосед когда-то закачал файл, и он лежит в кэше в gzip-виде. Запрашиваю этот файл я. Мой клиент тянет в два потока - шлет обычный запрос (назовем его первый), ответ на который в будущем оборвет посредине, и запрос с Range (второй) с прерванного места до конца. Ответ на первый запрос берется из кэша (т.к. сработал IMS), и клиенту отдается кусок gzip-файла. Ответ на второй запрос шлет сервер (т.к. IMS не вставлялся), исходя из размера несжатого файла. В итоге клиент, склеив два куска, получает абракадабру.
« Последнее редактирование: 23 декабря 2007, 01:48:35 от Михаил » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #83 : 23 декабря 2007, 13:02:56 »

Если получен запрос с "Range: bytes=...", и файл отдается из кэша, то хорошо бы отдавать лишь нужный кусок с ответом 206. Сейчас отдается весь файл с ответом 200.

Чревато тем, что у клиента может оказаться часть совсем не того файла, что есть у нас в кэше, и склеив их, клиент получит все ту же абракадабру! Отдавая сейчас весь файл из кэша, HC это предотвращает!

Сейчас мы не храним ни ETag, ни истинный IMS файлов в кэше. Соответственно, сопоставить их с запросом клиента, мы не можем! Следовательно, никто не может гарантировать, что в кэше у нас лежит именно тот файл, часть которого запрашивает клиент!

Сравнивать IMS клиента с датой файла в кэше, конечно можно, но это крайне ненадежный способ идентификации неизменности файла, т.к. он зависит от точности системной даты и времени, от скорости канала и т.д. ...
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +308/-14
Offline Offline

Сообщений: 5444



« Ответ #84 : 23 декабря 2007, 13:42:36 »

Чревато тем, что у клиента может оказаться часть совсем не того файла, что есть у нас в кэше, и склеив их, клиент получит все ту же абракадабру!
Тогда клиент запросит If-Range, If-Unmodified-Since или If-Match, чтоб убедиться в неизменности контента. Если таких заголовков нет (например, используем менеджер закачек), то можно смело отдавать из кэша только нужный кусок и ответ 206.
И IMS вставлять при этом тоже нужно.

Если же такие заголовки есть, то действительно, лучше отдать весь файл из кэша.
Когда же решимся организовать хранение метаданных? Слишком много вопросов в него упираются.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #85 : 23 декабря 2007, 15:51:28 »

Тогда клиент запросит If-Range, If-Unmodified-Since или If-Match, чтоб убедиться в неизменности контента. Если таких заголовков нет (например, используем менеджер закачек), то можно смело отдавать из кэша только нужный кусок и ответ 206.

Я не раз наблюдал в ReGet-е в процессе докачки на медленном канале сообщение типа: "Размер файла на сервере изменился! Удалить временный файл и начать закачку с начала?"
Причем, если жмешь "Нет", то он просто останавливает докачку!
А когда конечный размер файла неизвестен или не совпадает, то ReGet сразу трубит, что докачка невозможна и качает в 1 поток, а случае разрыва соединения предлагает начать все с начала! И это правильно!

Поэтому твой пример с багом выше вызывает у меня недоумения! Первая часть из кэша пришла с одним размером, вторая часть с сервера - с другим (без GZIP разница в разы, трудно не заметить)!
Какой менеджер закачек у тебя позволяет себе склеивать такой битый файл? ИМХО, это баг менеджера закачек!


P.S. Вообще-то, этой теме самое место в разделе "Новые предложения"! Вопрос о кэшировании/отдаче из кэша "206" уже много обсуждался в теме "Докачка файлов", куда и будут присоединены эти посты...
« Последнее редактирование: 23 декабря 2007, 17:39:37 от DenZzz » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +308/-14
Offline Offline

Сообщений: 5444



« Ответ #86 : 23 декабря 2007, 20:58:38 »

Какой менеджер закачек у тебя позволяет себе склеивать такой битый файл? ИМХО, это баг менеджера закачек!
Он не позволяет себе склеивать. Он перезапрашивает кусок еще и еще и получает ту же несовместимую картину. Это FlashGet. Не знаю, отключается ли у него такая настойчивость. Даже желания нет это изучать. Сейчас проще пустить его в обход НС.

А вот как берется повторно из кэша. Клиент запросил первый раз. НС начал выдавать файл.
Цитировать
GET http://fatal.ru/404.html HTTP/1.1
Host: fatal.ru
Accept: */*
Referer: http://fatal.ru
User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Connection: close

HTTP/1.1 200 OK
Server: HandyCache
Content-Length: 3736
Last-Modified: Tue, 18 Jul 2006 18:44:54 GMT
Content-Type: text/html; charset=windows-1251
Connection: Keep-Alive
Посреди закачки клиент шлет запрос куска от 1688 байта до конца файла. Первую при этом оборвет на 1687 байте. А НС отдает не запрашиваемый кусок, а весь файл.
Цитировать
GET http://fatal.ru/404.html HTTP/1.1
Host: fatal.ru
Accept: */*
Referer: http://fatal.ru
User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Range: bytes=1688-
Connection: close

HTTP/1.1 200 OK
Server: HandyCache
Content-Length: 3736
Last-Modified: Tue, 18 Jul 2006 18:44:54 GMT
Content-Type: text/html; charset=windows-1251
Connection: Keep-Alive
А можно было б отдать лишь нужную часть. При этом по совпадающему общему размеру и полю LM клиент понял бы, что это подходящая часть.
« Последнее редактирование: 23 декабря 2007, 21:04:22 от Михаил » Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #87 : 24 декабря 2007, 14:57:46 »

Цитировать
Если получен запрос с "Range: bytes=...", и файл отдается из кэша, то хорошо бы отдавать лишь нужный кусок с ответом 206. Сейчас отдается весь файл с ответом 200.
А на каком основании вообще берется файл из кэша? Мы ведь не сохраняем в кэше Partial Content? Значит и читать не имеем права. Пусть так же тянется из инета и в кэш не лезет.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +308/-14
Offline Offline

Сообщений: 5444



« Ответ #88 : 24 декабря 2007, 17:58:52 »

А на каком основании вообще берется файл из кэша?
Сработал, например, список Н.
Цитировать
Мы ведь не сохраняем в кэше Partial Content? Значит и читать не имеем права.
Мы сохраняем в кэше целый файл. Что нам мешает на соответствующий запрос отдать его часть?
Цитировать
Пусть так же тянется из инета и в кэш не лезет.
Из инета ничего не тянется. Посмотри приведенный пример. Там все из кэша.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +308/-14
Offline Offline

Сообщений: 5444



« Ответ #89 : 24 декабря 2007, 22:09:06 »

Не работает закачка в два потока не изменившихся html-файлов. Клиент запрашивает файл, сервер отвечает 304, и НС отдает файл из кэша. Клиент снова запрашивает, но уже кусок этого же файла - IMS не вставляется, и сервер отдает нужный кусок. Файл вроде один и тот же, но НС при записи в кэш добавлял в HTML свои тэги, и файл от НС уже не стыкуется с тем куском, который передает сервер. В итоге баг.
Если б НС вставлял IMS в запрос с Range, получил бы и второй раз ответ 304, и мог выдать нужный кусок из кэша без конфликта.
« Последнее редактирование: 24 декабря 2007, 22:13:07 от Михаил » Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #90 : 25 декабря 2007, 10:53:52 »

Сработал, например, список Н.
Почему тогда не срабатывает список З? URL же удовлетворяет списку?
Цитировать
Мы сохраняем в кэше целый файл. Что нам мешает на соответствующий запрос отдать его часть?
Точно так же - ничто не мешает записывать в кэш запрошенное продолжение недокачанного файла

Цитировать
Из инета ничего не тянется. Посмотри приведенный пример. Там все из кэша.
Так не должно было браться из кэша. Отсюда и твой глюк.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +308/-14
Offline Offline

Сообщений: 5444



« Ответ #91 : 25 декабря 2007, 14:17:15 »

Почему тогда не срабатывает список З? URL же удовлетворяет списку?
При срабатывании Н и наличии файла в кэше он не просматривается.
Цитировать
ничто не мешает записывать в кэш запрошенное продолжение недокачанного файла
Мешает невозможность хранения метаинформации. Но мы рассматриваем пример, когда файл уже весь есть в кэше.
Цитировать
Так не должно было браться из кэша.
Наоборот, должно было. Только не весь файл, а запрошенная часть.
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #92 : 27 декабря 2007, 14:48:12 »

Цитировать
При срабатывании Н и наличии файла в кэше он не просматривается.
Ты не понял. Я о том что PartialContent отключает запись в кэш но не влияет на чтение.
Это нелогично. Игнорировать так игнорировать.
Сообщить модератору   Записан
MRV_Pahan
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 9


« Ответ #93 : 15 декабря 2009, 12:35:32 »

А по какой причине заглохла эта ветка?
Ведь докачки как не было так и нет.

Хуже того, в связке Опера - Хэндикэш - Глобакс файлы принимаются с ошибками.
Т.е. качаем даже небольшой файл (порядка 1-2 метра) и при нестабильном соединении Хэндикэш начинает закачку заново, но опера об этом почему-то не "узнает" и продолжает закачку как будто закачка продолжилась.
В результате файл испорчен.
В цепочке Опера - Глобакс все корректно докачивается.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #94 : 15 декабря 2009, 13:04:50 »

Т.е. качаем даже небольшой файл (порядка 1-2 метра) и при нестабильном соединении Хэндикэш начинает закачку заново, но опера об этом почему-то не "узнает" и продолжает закачку как будто закачка продолжилась.

Не верю! HC так просто не умеет делать! Закачкой рулит браузер, HC только исполняет его запросы и по своей воле ничего заново закачивать не может. Приложи отладочный лог такого случая, посмотрим, что на самом деле у тебя происходит...

Сообщить модератору   Записан
divinets
Пользователь
**

Репутация: +1/-0
Offline Offline

Сообщений: 59


« Ответ #95 : 14 марта 2010, 17:35:14 »

Предлагаю научить HC возвращать Partial Content не только из интернета, но и из кэша.
Пример: есть большой файл в кэше и медленный клиент который не успевает за свою сессию скачать этот файл. В результате даже при возможности его качалки продолжить с места разъединения, HC отказывает ему и разрешает качать только весь файл целиком, т.е. с начала.
Есть возможность исправить в будущих версиях?
Сообщить модератору   Записан
rosman
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #96 : 13 мая 2010, 12:00:09 »

Докачка когда-нибудь появится или нет? Очень нужная идея, но почему-то так и не реализованная
Сообщить модератору   Записан
Parcher
Постоялец
***

Репутация: +1/-0
Offline Offline

Сообщений: 135


« Ответ #97 : 05 сентября 2010, 20:14:18 »

Извините меня, если данный вопрос уже где-то обсуждался. Но наряду с докачкой, планируется ли сделать многопотоковую закачку файлов? К примеру можно было сделать работу многопотоковой закачки файлов по правилам (качать в несколько поток файлы с расширением... и размером больше.... исключения....)
Сообщить модератору   Записан
DIGGER
Старожил
****

Репутация: +14/-3
Offline Offline

Сообщений: 306



« Ответ #98 : 06 сентября 2010, 14:51:15 »

Parcher, такого реализовать не возможно в принципе!
Многопоточность реализуема на стороне браузера, и только. (Не с проста ж есть всякие менеджеры закачек)
Сообщить модератору   Записан
Parcher
Постоялец
***

Репутация: +1/-0
Offline Offline

Сообщений: 135


« Ответ #99 : 06 сентября 2010, 15:36:03 »

А если запрос отправлять в менеджер закачки? К примеру в ReGet. Или это гемор?
Сообщить модератору   Записан
Страниц: 1 ... 3 4 [5] 6 7   Вверх
  Отправить эту тему    Печать  

 
Перейти в: