नमस्ते, कृपया इस साधारण फ़ाइल पर एक नज़र डालें server.js:

require('http').createServer((req, res) => {
  res.end('hiii');
  console.log('Response headers:', res.getHeaders());
}).listen(80);

मेरे ब्राउज़र में localhost:80 पर नेविगेट करने से यह समापन बिंदु प्रभावित होता है। इससे ब्राउज़र में hiii की प्रतिक्रिया दिखाई देती है, और हेडर भी stdout में लॉग हो जाते हैं।

अजीब बात यह है कि, हेडर लॉग इन स्टडआउट ब्राउज़र द्वारा प्राप्त हेडर से असहमत हैं।

Stdout मुझे 0 हेडर का प्रतिनिधित्व करने वाली एक वस्तु दिखाता है:

Response headers: [Object: null prototype] {}

डेवलपर टूल मुझे दिखाते हैं कि वास्तव में, 3 प्रतिक्रिया शीर्षलेख प्राप्त हुए थे:

Connection: keep-alive; Content-length: 4; Date: Wed, 15 Apr 2020 18:29:51 GMT

इस अंतर का क्या हिसाब है? मैं समझता हूं कि क्रोम में दिखाए गए 3 शीर्षलेख http के लिए बहुत ही मौलिक हैं। क्या क्रोम 0 शीर्षलेख प्राप्त कर रहा है, लेकिन उन्हें डिफ़ॉल्ट रूप से भर रहा है? क्या नोड की http लाइब्रेरी इन हेडर को डिफ़ॉल्ट रूप से भर रही है? अगर ऐसा है, तो उन्हें res.getHeaders() के माध्यम से उजागर क्यों नहीं किया जाता? क्या इन शीर्षलेखों की गणना कुछ निचले स्तर पर की जा रही है, जैसे सी पुस्तकालयों में? यदि हां, तो क्या इन मूल्यों को उजागर करने का कोई साधन है?

यदि हेडर की गणना की जाती है तो किसी प्रकार की एसिंक देरी होने पर मैंने निम्नलिखित कोशिश की:

require('http').createServer((req, res) => {
  res.end('hiii');
  setTimeout(() => console.log('Response headers:', res.getHeaders()), 3000);
}).listen(80);

लेकिन फिर भी, 0 हेडर स्टडआउट को भेजे जाते हैं।

कहीं, इन ३ शीर्षलेखों की गणना की जा रही है! मैं इन परिकलित शीर्षलेख मानों तक कैसे पहुँच सकता हूँ??

0
Gershom Maes 15 अप्रैल 2020, 21:42

1 उत्तर

सबसे बढ़िया उत्तर

मैंने उन्हें res.socket._httpMessage._header के अंतर्गत पाया

require('http').createServer((req, res) => {
    res.setHeader('HELLO', 'WORLD')
    res.end('hiii');
    console.log(res.getHeaders())
    console.log(res.socket._httpMessage._header)
}).listen(8000);

आप उन्हें getHeaders का उपयोग करके प्राप्त नहीं कर सकते क्योंकि वे नियमित एपीआई का उपयोग करके सेट नहीं हैं, लेकिन वे आंतरिक रूप से नोडज द्वारा भेजे जाते हैं।

यदि आप setHeader का उपयोग करके स्वयं एक शीर्षलेख परिभाषित करते हैं तो आप getHeaders का उपयोग करके इसे पुनः प्राप्त करने में सक्षम होंगे

प्रतिक्रिया शीर्षलेख क्लाइंट द्वारा उत्पन्न नहीं होते हैं क्योंकि उन्हें प्रतिक्रिया को संसाधित करने में सक्षम होने की आवश्यकता होती है। क्लाइंट अनुरोध को कैसे पढ़ सकता है यदि वह शरीर के आकार (Content-Length) को नहीं जानता है।

ये संचार नियम HTTP RFC में परिभाषित हैं और सर्वर को उन्हें लागू करना चाहिए ताकि क्लाइंट प्राप्त होने वाले संदेश को समझ सकता है।

NodeJS आंतरिक रूप से इन सूचनाओं की गणना करता है (स्रोत कोड परीक्षा यहां ) और संभवत: उन्हें आपके द्वारा उपयोग किए जा रहे उच्च स्तरीय एपीआई में संग्रहीत किए बिना किसी तरह सॉकेट में भेजता है। (एक अन्य स्रोत कोड उदाहरण)

0
Mickael B. 15 अप्रैल 2020, 20:13