我正在使用codeplex 1.1版中的c# webserver。我已經實現了Accept-Range頭文件,它確實有效。然而,當我使用Wireshark(版本1.4.1(SVN版本34476從/trunk-1.4))來捕捉流量,我看到以下內容:Http range header請求整個文件
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
的Web服務器將嘗試發送整個文件(> 600MB ),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-範圍頭,到目前爲止,我只能找到服務器必須發送請求的範圍。但我不能相信這是爲了一次使用範圍請求來請求一個巨大的文件。
我的網絡服務器試圖發送整個文件,因爲它已被請求,但我看到新的範圍請求進來這樣更大的範圍(只有範圍頭從請求頭複製。 ..)是Wireshark
Range: bytes=2162688-652965647 (@ time == 1.646204)
Range: bytes=4980736-652965647 (@ time == 2.754322)
Range: bytes=6356992-652965647 (@ time == 2.922479)
讀this我曾嘗試完畢後發送一個較短的範圍內,每當我得到整個文件的範圍請求的時間。但後來它不會在所有的工作。
我想知道:
- 是整個文件的範圍要求是某種iOS中的bug(4.3.3帶有看到它爲好)我本來期望
Range: bytes=0-1
和重播像Range: bytes=0-65535/652965648
- 後我可以採用某種優雅地否認這一點大請求並告訴我的要求,我可以一次提供最大尺寸? (我沒有在RFC中找到這個)
- IIS是否在一定數量的字節之後簡單地中止這個請求?
編輯:對於編號3:不是IIS,但瀏覽器似乎只是簡單地中止(和關閉)連接。之後提出新的請求。我無法想象範圍請求是爲了請求整個文件或文件的巨大部分。
編輯:在iOS7它似乎已經改變了。第一個範圍請求仍然是相同的(字節0-1)。之後,我會看到上面提到的2或3個範圍請求,其中最後一個請求持續傳輸較長時間的字節。但是仍然有多個請求完成。
我[觀察類似的行爲](http://stackoverflow.com/questions/12637728/http-byte-range-protocol-client-behaviour-on-ipad-iphone),對我來說,它看起來像這樣iPad/iPhone問題。 – mindas
@mindas確實是你;重新面對同樣的事情。由於我使用的網絡服務器的結構,我沒有多少選擇,需要重新拋出異常來停止處理範圍請求。幸運的是,我只有1個客戶端連接在同一時間(但它也適用於2或3)。我希望你會得到一些有用的答案。 –
我們在測試中看到的是safari詢問前兩個字節(範圍0-1),然後它要求整個文件並立即關閉連接,然後它要求*最後幾百KB文件*(我懷疑它包含重要的元數據,Chrome會按照這種方式做同樣的事情),然後開始以小塊開始請求文件。我懷疑確切的模式會因視頻格式而異。 –