जैसा कि वैरिकेन ने सुझाव दिया है, यह एक वैध अनुरोध है। जब ग्राहक मीडिया से अनुरोध कर रहा है या डाउनलोड को फिर से शुरू कर रहा है तो यह काफी सामान्य है।
एक क्लाइंट अक्सर यह देखने के लिए परीक्षण करेगा कि क्या सर्वर केवल एक Accept-Ranges
प्रतिक्रिया की तलाश के अलावा अन्य अनुरोधों को संभालता है । Chrome हमेशाRange: bytes=0-
एक वीडियो के लिए अपना पहला GET अनुरोध भेजता है , इसलिए यह ऐसा कुछ है जिसे आप खारिज नहीं कर सकते।
जब भी कोई ग्राहक Range:
अपने अनुरोध में शामिल होता है, भले ही यह विकृत हो, यह एक आंशिक सामग्री (206) प्रतिक्रिया की उम्मीद कर रहा है। जब आप एचटीएमएल 5 वीडियो प्लेबैक के दौरान आगे बढ़ते हैं, तो ब्राउज़र केवल शुरुआती बिंदु का अनुरोध करता है। उदाहरण के लिए:
Range: bytes=3744-
इसलिए, क्लाइंट के लिए वीडियो को ठीक से चलाने के लिए, आपके सर्वर को इन अधूरी श्रेणी के अनुरोधों को संभालने में सक्षम होना चाहिए।
आप अपने प्रश्न में निर्दिष्ट 'श्रेणी' के प्रकार को दो तरीकों से संभाल सकते हैं:
सबसे पहले, आप प्रतिक्रिया में दिए गए अनुरोध किए गए शुरुआती बिंदु के साथ जवाब दे सकते हैं, फिर फ़ाइल की कुल लंबाई माइनस एक (अनुरोधित बाइट रेंज शून्य-अनुक्रमित है)। उदाहरण के लिए:
निवेदन:
GET /BigBuckBunny_320x180.mp4
Range: bytes=100-
प्रतिक्रिया:
206 Partial Content
Content-Type: video/mp4
Content-Length: 64656927
Accept-Ranges: bytes
Content-Range: bytes 100-64656926/64656927
दूसरा, आप अनुरोध में दिए गए शुरुआती बिंदु और एक खुले सिरे वाली फ़ाइल की लंबाई (आकार) के साथ उत्तर दे सकते हैं। यह वेबकास्ट या अन्य मीडिया के लिए है जहां कुल लंबाई अज्ञात है। उदाहरण के लिए:
निवेदन:
GET /BigBuckBunny_320x180.mp4
Range: bytes=100-
प्रतिक्रिया:
206 Partial Content
Content-Type: video/mp4
Content-Length: 64656927
Accept-Ranges: bytes
Content-Range: bytes 100-64656926/*
टिप्स:
आपको हमेशा सीमा के साथ शामिल सामग्री की लंबाई के साथ जवाब देना चाहिए। यदि सीमा पूरी हो जाती है, शुरुआत से अंत तक, तो सामग्री की लंबाई बस अंतर है:
अनुरोध: सीमा: बाइट्स = 500-1000
प्रतिक्रिया: सामग्री-सीमा: बाइट्स 500-1000 / 123456
याद रखें कि सीमा शून्य-अनुक्रमित है, इसलिए Range: bytes=0-999
वास्तव में 1000 बाइट्स का अनुरोध करना है, न कि 999, इसलिए कुछ के साथ प्रतिक्रिया करें:
Content-Length: 1000
Content-Range: bytes 0-999/123456
या:
Content-Length: 1000
Content-Range: bytes 0-999/*
लेकिन, यदि संभव हो तो बाद के तरीके से बचें क्योंकि कुछ मीडिया खिलाड़ी फ़ाइल के आकार से अवधि जानने की कोशिश करते हैं। यदि आपका अनुरोध मीडिया सामग्री के लिए है, जो मेरा कूबड़ है, तो आपको प्रतिक्रिया में इसकी अवधि को शामिल करना चाहिए। यह निम्नलिखित प्रारूप के साथ किया जाता है:
X-Content-Duration: 63.23
यह एक फ्लोटिंग पॉइंट होना चाहिए। इसके विपरीत Content-Length
, इस मूल्य का सटीक होना आवश्यक नहीं है। इसका उपयोग खिलाड़ी को वीडियो के आसपास तलाश करने में मदद करने के लिए किया जाता है। यदि आप एक वेबकास्ट स्ट्रीमिंग कर रहे हैं और केवल एक सामान्य विचार है कि यह कब तक होगा, तो अपनी अनुमानित अवधि को पूरी तरह से अनदेखा करने के बजाय इसे शामिल करना बेहतर है। इसलिए, दो घंटे के वेबकास्ट के लिए, आप कुछ इस तरह शामिल कर सकते हैं:
X-Content-Duration: 7200.00
कुछ मीडिया प्रकारों जैसे, वेबम के साथ, आपको सामग्री-प्रकार भी शामिल करना होगा, जैसे:
Content-Type: video/webm
ये सभी मीडिया को ठीक से चलाने के लिए आवश्यक हैं, विशेष रूप से HTML5 में। यदि आप एक अवधि नहीं देते हैं, तो खिलाड़ी अपने फ़ाइल आकार से अवधि (मांगने के लिए अनुमति देने) का पता लगाने की कोशिश कर सकता है, लेकिन यह सही नहीं होगा। यह ठीक है, और वेबकास्ट या लाइव स्ट्रीमिंग के लिए आवश्यक है, लेकिन वीडियो फ़ाइलों के प्लेबैक के लिए आदर्श नहीं है। आप FFMPEG जैसे सॉफ़्टवेयर का उपयोग करके अवधि निकाल सकते हैं और इसे डेटाबेस या फ़ाइलनाम में भी सहेज सकते हैं।
X-Content-Duration
के पक्ष में चरणबद्ध किया जा रहा है Content-Duration
, इसलिए मैं उसे भी शामिल करूंगा। एक मूल, "0-" अनुरोध के जवाब में कम से कम निम्नलिखित शामिल होंगे:
HTTP/1.1 206 Partial Content
Date: Sun, 08 May 2013 06:37:54 GMT
Server: Apache/2.0.52 (Red Hat)
Accept-Ranges: bytes
Content-Length: 3980
Content-Range: bytes 0-3979/3980
Content-Type: video/webm
X-Content-Duration: 2054.53
Content-Duration: 2054.53
एक और बिंदु: क्रोम हमेशा निम्नलिखित के साथ अपना पहला वीडियो अनुरोध शुरू करता है:
Range: bytes=0-
कुछ सर्वर एक उत्तर के रूप में एक नियमित 200 प्रतिक्रिया भेजेंगे, जिसे वह स्वीकार करता है (लेकिन सीमित प्लेबैक विकल्पों के साथ), लेकिन अपने सर्वर के हैंडल रेंज की तुलना में दिखाने के लिए 206 भेजने की कोशिश करें। RFC 2616 का कहना है कि रेंज हेडर को अनदेखा करना स्वीकार्य है।