यह स्क्रिप्ट 'कर्ल' में अपेक्षित रूप से क्यों काम करती है, लेकिन ब्राउज़र में नहीं?


1

मेरे पास एक स्क्रिप्ट है जो जब HTTP प्रोटोकॉल के साथ एक्सेस होती है तो कुछ डेटा भेजती है, कुछ सेकंड के लिए रुकती है, फिर कुछ और डेटा भेजती है, जब तक कि सभी डेटा नहीं भेजे जाते हैं।

जब मैं इसे एक्सेस करता हूं curl, तो यह अपेक्षित रूप से व्यवहार करता है, और डेटा टुकड़े को टुकड़ा द्वारा भेजता है। हालाँकि, अगर मैं पृष्ठ को ब्राउज़र में एक्सेस करने की कोशिश करता हूं, तो स्क्रीन पर कुछ भी प्रदर्शित नहीं होता है जब तक कि पूरी स्क्रिप्ट चलना शुरू न हो जाए, कई सेकंड बाद।

आप URL तक पहुंचकर इस व्यवहार (अस्थायी रूप से) का निरीक्षण कर सकते हैं

curl 'http://50.80.82.137:8000'

फिर एक ब्राउज़र में URL को फिर से आज़माएँ और ध्यान दें कि स्क्रिप्ट कुछ भी लोड करने से पहले लगभग 7 सेकंड तक प्रतीक्षा करती है, भले ही उसे तुरंत पहली पंक्तियों तक पहुंच प्राप्त हो।

इस व्यवहार का स्रोत क्या है?


यह NodeJS में लिखा गया है, और मैंने इसे संदर्भ के लिए GitHub पर रखा है । हालांकि, इस मामले में मैं शामिल भाषा संभालने कर रहा हूँ जिसके कारण मैं इस पर पूछा अप्रासंगिक है ( SuperUser के बजाय StackOverflow , और जो डेटा भेजने इसी तरह से व्यवहार करेंगे पहले एक "ठहराव" है किसी भी स्क्रिप्ट।


1
मैं मान रहा हूं कि ब्राउजर HTML को पार्स करने में आसान बनाने के लिए डेटा को बफ़र करता है, लेकिन मुझे यकीन नहीं है कि इस व्यवहार के बारे में विवरण या संदर्भ कार्यों का विवरण कहां मिलेगा।
IQAndreas 15

यहाँ q ठीक है, लेकिन आपको एक व्यापक उपयोगकर्ता आधार मिल सकता है यदि आपने SO पर यह पूछा है और यह SO पर ठीक हो सकता है
barlop

@barlop पूरी तरह से बंद विषय (इसलिए जब मैंने इसे पढ़ा है तो मैं इस टिप्पणी को हटा दूंगा), आपकी प्रोफ़ाइल में पिछले चार वर्षों में 1,886 बार देखा गया है, फिर भी आपने कोई विवरण नहीं जोड़ा है, न ही आपकी वेबसाइट का लिंक। आप बहुत सारे मुफ्त (और अच्छी तरह से योग्य) प्रचार को याद कर रहे हैं।
IQAndreas

जवाबों:


2

एक वेब ब्राउजर तब तक वेब पेज को प्रोसेस करना शुरू नहीं कर सकता, जब तक कि पूरा HTML डॉक्यूमेंट डाउनलोड न हो जाए। एक बार HTML डाउनलोड हो जाने के बाद इसे पार्स और रेंडर किया जा सकता है, लेकिन इससे पहले नहीं।

कर्ल को पूरे दस्तावेज की प्रतीक्षा करने की आवश्यकता नहीं है क्योंकि यह कुछ भी पार्स नहीं करता है, यह बस StdOutआते ही सब कुछ प्रिंट करता है।

क्लाइंट-साइड व्यवहार को प्रभावित करने के लिए क्लाइंट-साइड टूल (जावास्क्रिप्ट, सीएसएस, आदि) का उपयोग करें, न कि नेटवर्क प्रोटोकॉल का।


क्या उस पर कोई प्रलेखन है जिसके साथ आप अपने उत्तर को पूरक कर सकते हैं? (या फ़ायर्फ़ॉक्स के स्रोत कोड के प्रासंगिक भाग का लिंक भी है जो इस "प्रतीक्षा" व्यवहार को दर्शाता है)
IQAndreas
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.