Правильный выбор диапазона HTTP, так что Down Them All работает - PullRequest
1 голос
/ 20 февраля 2011

Я создал веб-приложение, которое должно служить Recorded TV в качестве загрузки (для тех, кто кричит, что это незаконно, я могу сказать им: в Германии это не так, если вы делаете это правильно). Вы можете взглянуть на проект на http://niklasfi.de:8080.

Теперь о моей проблеме: Download + Resume работает с обычным firefox. Но у меня проблемы с некоторыми менеджерами закачек. Поэтому мне интересно, почему. Я думаю, это связано с тем, что я неправильно понял HTTP или что-то в этом роде.

Когда клиент хочет что-то скачать, ему сначала дается билет (в нашем случае это 45729410) и перенаправляется на фактическую ссылку для скачивания.

GET /createTicketFor/Matrix_Revolutions_11.02.13_22-30_pro7_155_TVOON_DE.mpg.avi.otrkey HTTP/1.1
Host: niklasfi.de:8080
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0b12pre) Gecko/20110216 Firefox/4.0b12pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en;q=0.7,en-gb;q=0.5,en-au;q=0.3,en-us;q=0.2
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://niklasfi.de:8080/

HTTP/1.1 302 Moved Temporarily
location: /download/45729410
Connection: keep-alive
Transfer-Encoding: chunked

После этого firefox отправляет запрос на получение ссылки на скачивание (это делается, когда вам предоставляются параметры загрузки (открыть, загрузить, внизThaOneClick)

GET /download/45729410 HTTP/1.1
Host: niklasfi.de:8080
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0b12pre) Gecko/20110216 Firefox/4.0b12pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en;q=0.7,en-gb;q=0.5,en-au;q=0.3,en-us;q=0.2
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://niklasfi.de:8080/

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=Matrix_Revolutions_11.02.13_22-30_pro7_155_TVOON_DE.mpg.avi.otrkey
Content-Length: 1428013574
Connection: keep-alive

Я выбрал последнее, так что Down Down Все начинается 4 загрузки:

=== DTA.1 ===
GET /download/45729410 HTTP/1.1
Host: niklasfi.de:8080
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0b12pre) Gecko/20110216 Firefox/4.0b12pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8, application/metalink4+xml;q=0.9,application/metalink+xml;q=0.8
Accept-Language: de-de,de;q=0.8,en;q=0.7,en-gb;q=0.5,en-au;q=0.3,en-us;q=0.2
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: close
Referer: http://niklasfi.de:8080/
Want-Digest: SHA512;q=0.9, SHA256;q=0.7, SHA, SHA1;q=0.5, MD5;q=0.3
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=Matrix_Revolutions_11.02.13_22-30_pro7_155_TVOON_DE.mpg.avi.otrkey
Content-Length: 1428013574
Connection: close

=== DTA.2 ===
GET /download/45729410 HTTP/1.1
Host: niklasfi.de:8080
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0b12pre) Gecko/20110216 Firefox/4.0b12pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en;q=0.7,en-gb;q=0.5,en-au;q=0.3,en-us;q=0.2
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: close
Range: bytes=714610068-
Referer: http://niklasfi.de:8080/
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=Matrix_Revolutions_11.02.13_22-30_pro7_155_TVOON_DE.mpg.avi.otrkey
Content-Length: 1428013574
Content-Range: bytes 714610068-1428013573/1428013574
Connection: close

=== DTA.3 ===
GET /download/45729410 HTTP/1.1
Host: niklasfi.de:8080
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0b12pre) Gecko/20110216 Firefox/4.0b12pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en;q=0.7,en-gb;q=0.5,en-au;q=0.3,en-us;q=0.2
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: close
Range: bytes=357908315-
Referer: http://niklasfi.de:8080/
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=Matrix_Revolutions_11.02.13_22-30_pro7_155_TVOON_DE.mpg.avi.otrkey
Content-Length: 1428013574
Content-Range: bytes 357908315-1428013573/1428013574
Connection: close

=== DTA.4 ===
GET /download/45729410 HTTP/1.1
Host: niklasfi.de:8080
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0b12pre) Gecko/20110216 Firefox/4.0b12pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en;q=0.7,en-gb;q=0.5,en-au;q=0.3,en-us;q=0.2
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: close
Range: bytes=1071311822-
Referer: http://niklasfi.de:8080/
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=Matrix_Revolutions_11.02.13_22-30_pro7_155_TVOON_DE.mpg.avi.otrkey
Content-Length: 1428013574
Content-Range: bytes 1071311822-1428013573/1428013574
Connection: close

Что меня удивляет, так это то, что заголовки Range всех запросов не дают конечной точки. У DTA shoule есть необходимая информация, так как он «знает», где он должен запустить остальные три запроса.

Пока все хорошо. Все работало Но нет! DTA отменяет последние 3 запроса. Почему это?

Это не так уж плохо, так как все еще можно приостановить загрузку, что я и хочу. На самом деле давайте сделаем это сейчас. Я нажимаю кнопку «Пауза». На резюме отправляются два следующих запроса:

=== RESTART ===
GET /download/45729410 HTTP/1.1
Host: niklasfi.de:8080
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0b12pre) Gecko/20110216 Firefox/4.0b12pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en;q=0.7,en-gb;q=0.5,en-au;q=0.3,en-us;q=0.2
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: close
Range: bytes=10909760-
Referer: http://niklasfi.de:8080/
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=Matrix_Revolutions_11.02.13_22-30_pro7_155_TVOON_DE.mpg.avi.otrkey
Content-Length: 1428013574
Content-Range: bytes 10909760-1428013573/1428013574
Connection: close

=== RESTART +1 ===
GET /download/45729410 HTTP/1.1
Host: niklasfi.de:8080
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0b12pre) Gecko/20110216 Firefox/4.0b12pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8, application/metalink4+xml;q=0.9,application/metalink+xml;q=0.8
Accept-Language: de-de,de;q=0.8,en;q=0.7,en-gb;q=0.5,en-au;q=0.3,en-us;q=0.2
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: close
Referer: http://niklasfi.de:8080/
Want-Digest: SHA512;q=0.9, SHA256;q=0.7, SHA, SHA1;q=0.5, MD5;q=0.3
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=Matrix_Revolutions_11.02.13_22-30_pro7_155_TVOON_DE.mpg.avi.otrkey
Content-Length: 1428013574
Connection: close

Но нет! Внезапно вся загрузка до здесь обрезается, и я не могу даже приостановить свою загрузку. Единственный вариант, который у меня есть, это отменить его. И я до сих пор использую только одну «ветку» загрузки.

Я был бы рад, если бы вы опубликовали какие-либо идеи, объясняющие это поведение. (В любом случае, спасибо за чтение этого)

1 Ответ

1 голос
/ 21 февраля 2011

вместо 200, 206 должно быть отправлено в качестве ответа, если указано «Частичное содержимое»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...