मैं कोडप्लेक्स संस्करण 1.1 से c# webserver के साथ काम कर रहा हूं। मैंने स्वीकृति-रेंज हेडर लागू किए हैं और यह काम करता है। लेकिन जब मैं wireshark (संस्करण /trunk-1.4 से 1.4.1 (SVN रेव 34476)) का उपयोग यातायात को पकड़ने के लिए, मैं निम्न देखें:एचटीपी रेंज हेडर अनुरोध पूरी फ़ाइल
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
वेबसर्वर पूरे फाइल भेजने की कोशिश करेंगे (> 600MB), वायरशर्क दिखाता है कि पूरी बातचीत 159774 बाइट्स है। मैं आईआईएस के साथ एक ही काम करते हैं अगर मैं इसी तरह के हेडर प्राप्त
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 पता चलता है कि पूरी बातचीत 175,615 बाइट है।
मैंने स्वीकृति-रेंज हेडर पर अधिक जानकारी की खोज की है, और अब तक मुझे केवल यह पता चल सकता है कि सर्वर को अनुरोधित सीमा भेजनी होगी। लेकिन मुझे विश्वास नहीं है कि यह एक समय में एक बड़ी फाइल का अनुरोध करने के लिए एक सीमा अनुरोध का उपयोग करना था।
मेरा वेबसर्वर पूरी फ़ाइल भेजने की कोशिश करता है क्योंकि इस तरह से अनुरोध किया गया है, लेकिन मुझे इस तरह की बड़ी श्रृंखलाओं के साथ आने वाले नए रेंज अनुरोध दिखाई देते हैं (अनुरोध हेडर से केवल रेंज हेडर कॉपी किया गया है। (@time। ..) wireshark
Range: bytes=2162688-652965647 (@ time == 1.646204)
Range: bytes=4980736-652965647 (@ time == 2.754322)
Range: bytes=6356992-652965647 (@ time == 2.922479)
के समय this मैं कोशिश की है पढ़ने के बाद एक छोटी रेंज जब भी मैं पूरी फ़ाइल के लिए रेंज अनुरोध प्राप्त भेजने के लिए है। लेकिन तब यह बिल्कुल काम नहीं करता।
मैं जानना चाहता हूं:
- पूरी फ़ाइल के लिए रेंज अनुरोध आईओएस में बग के कुछ प्रकार है (और साथ 4.3.3 के साथ देखा जाता है) मैं
Range: bytes=0-1
अपेक्षा की होगी औरRange: bytes=0-65535/652965648
- तरह पुनरावृत्ति कुछ के बाद मैं किसी भी तरह शान से इस बड़े से इनकार कर सकते हैं है अनुरोध करें और अनुरोध करें कि मैं एक बार में अधिकतम आकार दे सकता हूं? (मुझे यह आरएफसी में नहीं मिला)
- क्या आईआईएस कुछ निश्चित बाइट्स के बाद इस अनुरोध को निरस्त कर रहा है?
संपादित: नंबर 3 के लिए: आईआईएस नहीं लेकिन ब्राउज़र बस निरस्त (और समापन) कनेक्शन लगता है। उसके बाद एक नया अनुरोध कर रहा है। मैं कल्पना नहीं कर सकता कि रेंज अनुरोध पूरी फ़ाइल या फ़ाइल के बड़े हिस्सों का अनुरोध करने के लिए था।
संपादित करें: आईओएस 7 में ऐसा लगता है। पहला रेंज अनुरोध अभी भी वही है (बाइट 0-1)। इसके बाद, मुझे ऊपर वर्णित 2 या 3 रेंज अनुरोध दिखाई देते हैं, जहां अंतिम अनुरोध लंबी अवधि के लिए बाइट्स को स्थानांतरित करता रहता है। हालांकि अभी भी कई अनुरोध किए गए हैं। बाइट्स = 0-1 और तरह पुनरावृत्ति कुछ के बाद:
मैं [समान व्यवहार देख रहा हूं] (http://stackoverflow.com/questions/12637728/http-byte-range-protocol-client-behaviour-on-ipad-iphone), और मेरे लिए ऐसा लगता है आईपैड/आईफोन मुद्दा। – mindas
@ मिन्दास वास्तव में आप एक ही चीज़ का सामना कर रहे हैं। मेरे द्वारा उपयोग किए जाने वाले वेबसर्वर की संरचना के कारण, मेरे पास अधिक विकल्प नहीं है और सीमा अनुरोध को संभालने से रोकने के लिए अपवाद को फिर से फेंकने की आवश्यकता है। सौभाग्य से मेरे पास एक ही समय में केवल 1 क्लाइंट कनेक्शन है (लेकिन यह 2 या 3 के साथ भी काम करता है)। मुझे आशा है कि आपको कुछ उपयोगी उत्तर मिलेगा। –
हम अपने परीक्षण में जो देखते हैं वह है सफारी पहले दो बाइट्स (रेंज 0-1) के लिए पूछता है, फिर यह पूरी फाइल के लिए पूछता है और तुरंत कनेक्शन बंद कर देता है, फिर यह * फाइल के पिछले कुछ सौ किलोबाइट * के लिए पूछता है (जो मुझे संदेह है कि इसमें महत्वपूर्ण मेटाडाटा शामिल है। क्रोम वैसे ही वही काम करता है), और उसके बाद यह फ़ाइल को छोटे हिस्सों में शुरू होने से शुरू करने के लिए कहता है। मुझे संदेह है कि वीडियो प्रारूप के आधार पर सटीक पैटर्न अलग-अलग होगा। –