कभी-कभी आपके ब्राउज़र (या अन्य एप्लिकेशन) पर वफादार डाउनलोड प्रगति मीटर केवल अपने हाथों को हवा में फेंकता है और शेष समय प्रदर्शित करने पर छोड़ देता है। क्यों यह कभी-कभी अनुमानित डाउनलोड समय को नाखून देता है और कभी-कभी यह सब एक साथ रिपोर्ट करने में विफल रहता है?
आज का प्रश्न और उत्तर सत्र सुपरयूज़र के सौजन्य से आता है - स्टैक एक्सचेंज का एक उपखंड, जो कि क्यू एंड ए वेब साइटों का एक समुदाय-संचालित समूह है।
प्रश्न
सुपरयूज़र रीडर कोल्डब्लैकिस जानना चाहता है कि उसका ब्राउज़र हमेशा गंदगी क्यों नहीं करता है:
कभी-कभी, वेब ब्राउज़र में किसी फ़ाइल को डाउनलोड करते समय, डाउनलोड की प्रगति फ़ाइल के कुल आकार को "नहीं" जानती है, या डाउनलोड में कितनी दूर है - यह सिर्फ उस गति को दिखाता है जिस पर वह डाउनलोड कर रहा है, कुल के साथ। "अज्ञात" के रूप में।
ब्राउज़र को कुछ फ़ाइलों का अंतिम आकार क्यों नहीं पता होगा? यह जानकारी पहली जगह में कहां मिलती है?
वास्तव में कहां?
जवाब
सुपरयूजर योगदानकर्ता ग्रोनोस्तज निम्नलिखित अंतर्दृष्टि प्रदान करता है:
वेब सर्वर से दस्तावेज़ों का अनुरोध करने के लिए, ब्राउज़र HTTP प्रोटोकॉल का उपयोग करते हैं। आप अपने पता बार से उस नाम को जान सकते हैं (यह अब छिपा हो सकता है, लेकिन जब आप पता बार पर क्लिक करते हैं, तो URL को कॉपी करें और इसे कुछ टेक्स्ट एडिटर में पेस्ट करें, आप देखेंगे
एचटीटीपी://शुरू में)। यह एक सरल पाठ-आधारित प्रोटोकॉल है और यह इस तरह काम करता है:सबसे पहले, आपका ब्राउज़र वेबसाइट के सर्वर से जुड़ता है और उस दस्तावेज़ का URL भेजता है जिसे वह डाउनलोड करना चाहता है (वेब पेज दस्तावेज़ भी हैं) और ब्राउज़र के बारे में कुछ विवरण ( उपभोक्ता अभिकर्ता आदि)। उदाहरण के लिए, SuperUser साइट पर मुख्य पृष्ठ लोड करने के लिए,
एचटीटीपी://सुपरयूजर.कॉम/, मेरा ब्राउज़र एक अनुरोध भेजता है जो इस तरह दिखता है:GET / HTTP / 1.1 होस्ट: superuser.com कनेक्शन: जीवित रखें स्वीकार करें: पाठ / html, अनुप्रयोग / xhtml + xml, अनुप्रयोग / xml; q = 0.9, * / *; q / = उपयोगकर्ता-एजेंट: मोज़िला / 5.0 (विंडोज NT 6.1; WOW64) स्वीकार-एनकोडिंग: गज़िप, अपस्फीति, sdch स्वीकार-भाषा: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; q = 0.4 कुकी: [removed for security] DNT: 1 अगर-संशोधित-चूंकि: मंगल, 09 जुलाई 2013 07:14:17 GMTपहली पंक्ति निर्दिष्ट करती है कि सर्वर को कौन से दस्तावेज़ को वापस करना चाहिए। अन्य पंक्तियों को हेडर कहा जाता है; वे इस तरह दिखते हैं:
हैडर का नाम: हैडर मूल्यये लाइनें अतिरिक्त जानकारी भेजती हैं जो सर्वर को यह तय करने में मदद करती हैं कि क्या करना है।
यदि सब कुछ ठीक है, तो सर्वर अनुरोधित दस्तावेज भेजकर जवाब देगा। प्रतिक्रिया स्थिति संदेश के साथ शुरू होती है, उसके बाद कुछ हेडर (दस्तावेज़ के बारे में विवरण के साथ) और अंत में, यदि सब कुछ ठीक है, तो दस्तावेज़ की सामग्री। मेरे अनुरोध के लिए सुपरयूज़र सर्वर का यह उत्तर कैसा दिखता है:
HTTP / 1.1 200 ठीक है कैश-कंट्रोल: सार्वजनिक, अधिकतम आयु = 60 सामग्री-प्रकार: पाठ / html; charset = utf-8 अवसान: मंगल, 09 जुलाई 2013 07:27:20 GMT अंतिम-संशोधित: मंगल, 09 जुलाई 2013 07:26:20 GMT वैरी: * एक्स-फ़्रेम-विकल्प: SAMEORIGIN दिनांक: मंगल, 09 जुलाई 2013 07:26:19 GMT सामग्री-लंबाई: 139672 <! DOCTYPE html> <Html> [...snip...] </ Html>अंतिम पंक्ति के बाद, SuperUser का सर्वर कनेक्शन बंद कर देता है।
पहली पंक्ति (
HTTP / 1.1 200 ठीक है) शामिल हैं रेस्पोंस कोड , इस मामले में यह200 ठीक है। इसका मतलब है कि सर्वर अनुरोध के अनुसार एक दस्तावेज लौटाएगा। जब सर्वर ऐसा करने का प्रबंधन नहीं करता है, तो कोड कुछ और होगा: आपने शायद देखा है404 नहीं मिला, तथा403 निषिद्धबहुत आम है, भी। फिर हेडर फॉलो करते हैं।जब ब्राउज़र को प्रतिक्रिया में एक खाली रेखा मिलती है, तो यह जानता है कि उस पंक्ति के पिछले सब कुछ उस दस्तावेज़ की सामग्री है जिसे उसने अनुरोध किया था। तो इस मामले में
<! DOCTYPE html>सुपरयूजर के होमपेज कोड की पहली पंक्ति है। अगर मैं एक दस्तावेज़ को डाउनलोड करने का अनुरोध कर रहा था, तो यह संभवतः कुछ अस्पष्ट चरित्र होगा, क्योंकि अधिकांश दस्तावेज़ प्रारूप बिना पूर्व प्रसंस्करण के अप्राप्य हैं।वापस हेडर के लिए। हमारे लिए सबसे दिलचस्प एक आखिरी है,
कंटेंट की लम्बाई। यह ब्राउज़र को सूचित करता है कि खाली लाइन के बाद उसे कितने बाइट्स की अपेक्षा करनी चाहिए, इसलिए मूल रूप से यह बाइट्स में व्यक्त किए गए दस्तावेज़ का आकार है। यह शीर्ष लेख अनिवार्य नहीं है और सर्वर द्वारा छोड़ा जा सकता है। कभी-कभी दस्तावेज़ आकार की भविष्यवाणी नहीं की जा सकती है (उदाहरण के लिए जब दस्तावेज़ मक्खी पर उत्पन्न होता है), कभी-कभी आलसी प्रोग्रामर इसमें शामिल नहीं होते हैं (ड्राइवर डाउनलोड साइटों पर काफी आम है), कभी-कभी वेबसाइटें नए-नए द्वारा बनाई जाती हैं जो नहीं जानते हैं इस तरह के एक हेडर के।वैसे भी, कारण कुछ भी हो, हैडर गायब हो सकता है। उस स्थिति में ब्राउज़र को यह पता नहीं होता है कि सर्वर कितना डेटा भेजने जा रहा है, और इस प्रकार दस्तावेज़ का आकार प्रदर्शित होता है अनजान कनेक्शन बंद करने के लिए सर्वर का इंतजार कर रहा है। और वह अज्ञात दस्तावेज़ आकार का कारण है।