2013-08-19 12 views
9

पर HTTP/1.1 प्रतिक्रिया मेरे HTTP/1.1 सर्वर लिखते समय, मैं एकाधिक श्रेणियों के अनुरोध से निपटने में फंस जाता हूं।एकाधिक रेंज

आरएफसी 2616 की धारा 14.35.1 कुछ उदाहरणों को संदर्भित करता है लेकिन सर्वर व्यवहार को स्पष्ट नहीं करता है। उदाहरण के लिए:

GET /some/resource HTTP/1.1 
... 
Range: bytes=200-400,100-300,500-600 
... 

मैं बाइट्स की इस सही अनुक्रम लौट जाना चाहिए? या मुझे 100-400,500-600 भेजकर सभी श्रेणियों को मर्ज करना चाहिए? या 100-600 के बीच में सभी भेज रहे हैं?

सबसे बुरे, जब Content-Range प्रतिक्रिया हेडर (धारा 14.16) की जाँच, केवल एक ही रेंज, लौटाया जा सकता है तो मुझे आश्चर्य है कि कैसे धारा 14.35.1 bytes=0-0,-1 में उदाहरण के लिए एक सर्वर प्रतिक्रिया होगा !!!

मेरा सर्वर ऐसे अनुरोधों को कैसे संभालना चाहिए?

उत्तर

11

मैं बस कैसे अन्य सर्वर Range हेडर फ़ील्ड का जवाब हो सकता है समर्थन पर एक नज़र था और किया एक त्वरित curlexample.com रहे हैं:

~# curl -s -D - -H "Range: bytes=100-200, 300-400" http://www.example.com 
HTTP/1.1 206 Partial Content 
Accept-Ranges: bytes 
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 
Content-Length: 385 
Server: ECS (fll/0761) 


--3d6b6a416f9b5 
Content-Type: text/html 
Content-Range: bytes 100-200/1270 

eta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    <meta name="vieport" content 
--3d6b6a416f9b5 
Content-Type: text/html 
Content-Range: bytes 300-400/1270 

-color: #f0f0f2; 
     margin: 0; 
     padding: 0; 
     font-family: "Open Sans", "Helvetica 
--3d6b6a416f9b5-- 

जाहिर है, जो आपके लिए देख Content-Type: multipart/byteranges; boundary प्रतिक्रिया हेडर है। a W3C document with appendices to RFC 2616

कर दिया कि वास्तव में Googling एक HTTP 206 (आंशिक सामग्री) प्रतिक्रिया संदेश एक से अधिक श्रेणियों की सामग्री (कई गैर-अतिव्यापी श्रेणियों के लिए एक अनुरोध के जवाब में) भी शामिल है, तो ये एक बहुखण्डीय के रूप में प्रसारित कर रहे हैं संदेश का मुख्य हिस्सा। इस उद्देश्य के लिए मीडिया प्रकार को "multipart/byteranges" कहा जाता है।
multipart/byteranges मीडिया प्रकार में दो या दो से अधिक भाग शामिल हैं, जिनमें से प्रत्येक के अपने Content-Type और Content-Range फ़ील्ड हैं। आवश्यक सीमा पैरामीटर प्रत्येक शरीर-भाग को अलग करने के लिए उपयोग की जाने वाली सीमा स्ट्रिंग निर्दिष्ट करता है।

तो वहां आप जाते हैं।

वैसे, example.com पर सर्वर बाइट पर्वतमाला ओवरलैपिंग के लिए जाँच करता है और आप वास्तव में पर्वतमाला का अनुरोध आपने किया भेजता है ...

+0

आप बिंदु मारा! मैं कबूल करता हूं कि मैंने कोशिश नहीं की क्योंकि मुझे डर था कि इसके परिणामस्वरूप कुछ सर्वर विशिष्ट व्यवहार हो सकते हैं, और कोई मानक नहीं। धन्यवाद! –

संबंधित मुद्दे