Заголовок диапазона Http запрашивает весь файл

я работаю с веб-сервером c#из codeplex версии 1.1. Я реализовал заголовки Accept-Range, и это работает. Однако, когда я использую wireshark (версия 1.4.1 (SVN Rev 34476 from /trunk-1.4)) для перехвата трафика, я вижу следующее:

GET /movies/i_am_legend%20dvd/main.m4v HTTP/1.1
Host: 10.100.1.199:8081
Accept: */*
Range: bytes=0-1
Accept-Encoding: identity
Connection: keep-alive
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
X-Playback-Session-Id: 9CED81CC-BFAE-4CF6-A477-0EA62B2C652F

HTTP/1.1 206 PartialContent
Content-Range: bytes 0-1/652965648
Accept-Ranges: bytes
ETag: "0daA8D4/wgt4MFvxdNIPLw=="
Date: Wed, 13 Jun 2012 09:10:18 GMT
Content-Length: 2
Content-Type: video/x-m4v
Server: Tiny WebServer
Connection: keep-alive

..  << 2 bytes data

GET /movies/i_am_legend%20dvd/main.m4v HTTP/1.1
Host: 10.100.1.199:8081
Accept: */*
Range: bytes=0-652965647
Accept-Encoding: identity
Connection: keep-alive
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
X-Playback-Session-Id: 9CED81CC-BFAE-4CF6-A477-0EA62B2C652F

HTTP/1.1 206 PartialContent
Content-Range: bytes 0-652965647/652965648
Accept-Ranges: bytes
ETag: "0daA8D4/wgt4MFvxdNIPLw=="
Date: Wed, 13 Jun 2012 09:10:18 GMT
Content-Length: 652965648
Content-Type: video/x-m4v
Server: Tiny WebServer
Connection: keep-alive

Веб-сервер попытается отправить весь файл (>600 МБ), wireshark показывает что весь разговор занимает 159774 байта. Если я делаю то же самое с IIS, я получаю аналогичные заголовки

GET /ipod/main.m4v HTTP/1.1
Host: 10.100.1.199
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
Accept: */*
Range: bytes=0-1
Accept-Encoding: identity
X-Playback-Session-Id: C5BBF91D-78AB-42BA-ACE0-D74AB9D845CE
Connection: keep-alive

HTTP/1.1 206 Partial Content
Content-Type: video/x-m4v
Last-Modified: Mon, 11 Jun 2012 10:33:41 GMT
Accept-Ranges: bytes
ETag: "7243cabbd47cd1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 13 Jun 2012 09:21:03 GMT
Content-Length: 2
Content-Range: bytes 0-1/652965648

..  << 2 bytes of data

GET /ipod/main.m4v HTTP/1.1
Host: 10.100.1.199
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
Accept: */*
Range: bytes=0-652965647
Accept-Encoding: identity
X-Playback-Session-Id: C5BBF91D-78AB-42BA-ACE0-D74AB9D845CE
Connection: keep-alive

HTTP/1.1 206 Partial Content
Content-Type: video/x-m4v
Last-Modified: Mon, 11 Jun 2012 10:33:41 GMT
Accept-Ranges: bytes
ETag: "7243cabbd47cd1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 13 Jun 2012 09:21:03 GMT
Content-Length: 652965648
Content-Range: bytes 0-652965647/652965648

. Wireshark показывает, что весь диалог занимает 175615 байт.

Я искал дополнительную информацию о заголовках Accept-Range и пока нашел только то, что сервер должен отправить запрошенный диапазон. Но я не могу поверить, что он предназначался для использования запроса диапазона для запроса огромного файла за один раз.

Мой веб-сервер пытается отправить весь файл, потому что он был запрошен как таковой, но я вижу новые запросы диапазона, поступающие с более огромными диапазонами, подобными этому (только заголовок Range скопирован из заголовка запроса. (@time .. . ) это время wireshark

Range: bytes=2162688-652965647 (@ time == 1.646204)
Range: bytes=4980736-652965647 (@ time == 2.754322)
Range: bytes=6356992-652965647 (@ time == 2.922479)

После прочтения этого я пытался отправлять более короткий диапазон всякий раз, когда я получаю запрос диапазона для всего файла.Но тогда это вообще не работает.

Я хотел бы знать:

  1. Является ли запрос диапазона для всего файла какой-то ошибкой в ​​​​iOS (видел это с 4.3.3) я бы ожидал Range: bytes=0-1и после повтора что-то вроде Range: bytes=0-65535/652965648
  2. Могу ли я как-то изящно отклонить этот большой запрос и подскажите запрошенному, что я могу поставить максимальный размер сразу? (Я не нашел этого в RFC)
  3. IIS просто прерывает этот запрос после определенного количества байтов?

РЕДАКТИРОВАТЬ : Для номера 3: Не IIS, а браузер просто прерывает (и закрывает) соединение. После этого делаем новый запрос. Я не могу представить, что запрос диапазона предназначался для запроса всего файла или ОГРОМНЫХ частей файла.

РЕДАКТИРОВАТЬ: в iOS7 это, кажется, изменилось. Первый запрос диапазона остается прежним (байты 0-1). После этого я вижу 2 или 3 запроса диапазона, как указано выше, где последний запрос продолжает передавать байты в течение более длительного периода. Однако все еще выполняется несколько запросов.

6
задан Uwe Keim 30 January 2018 в 13:04
поделиться