HTTPS

2010-10-11 17 views
6

पर सेवा करते समय Node.js फ़ाइलों को काटता है I Node.js के साथ कुछ जावास्क्रिप्ट फ़ाइलों को प्रस्तुत करने की कोशिश कर रहा हूं और किसी भी कारण से फ़ाइलों को ट्रांसमिशन के बीच में काटा जा रहा है। कोड:HTTPS

httpsServer = http.createServer(function(req, res) { 
    var path = url.parse(req.url).pathname; 

    if (path[path.length - 1] == '/') { 
      path += 'index.html'; 
    } 

    fs.readFile(root + path, function(err, data){ 
      if (err) return send404(res); 

      res.writeHead(200, { 
       'Content-Type': getMimeType(getExtension(path)), 
       'Content-Length': data.length}); 
      res.end(data); 

    }); 
}), 

var privateKey = fs.readFileSync(settings.PRIVATE_KEY).toString(); 
var certificate = fs.readFileSync(settings.CERTIFICATE).toString(); 

var credentials = crypto.createCredentials({key: privateKey, cert: certificate}); 
httpsServer.setSecure(credentials); 
httpsServer.listen(settings.HTTPS_PORT); 

फ़ाइलों http://github.com/LearnBoost/Socket.IO/raw/master/socket.io.js और http://code.jquery.com/jquery-1.4.2.min.js। पहला व्यक्ति बिल्कुल 32 केबी पर और दूसरा 16 केबी पर काट दिया जाता है। यह HTTP, केवल HTTPS और केवल एक नेटवर्क पर नहीं होता है (उदा .: स्थानीयहोस्ट से नहीं)।

किसी भी मदद की वास्तव में सराहना की जाएगी।

उत्तर

12

के बजाय Content-Length: data.length आप Content-Length: Buffer.byteLength(data, 'utf8') का उपयोग करना चाहिए जहां Buffer एक वैश्विक वस्तु (नोड 0.3.x) या var Buffer = require('buffer') नोड 0.2.x में जो आप परेशानी का एक बहुत बचत होगी और भी छोटा कर दिया जवाब के साथ आपकी समस्या का समाधान हो सकता है।

+0

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। खैर, यह वास्तव में: बफर .byteLength (डेटा, 'utf8')। ध्यान दें कि "語 語 語" .length == 3 जबकि Buffer.byteLength ("語 語 語", 'utf8') == 9, इस मामले में सही उत्तर। –

+0

धन्यवाद फिल, उस पर नजर डालें! – tedeh

0

यह readFile और res.end() के लिए डिफ़ॉल्ट एन्कोडिंग के बीच डिस्कनेक्ट हो सकता है। readFile केवल कच्चे डेटा को लोड करता है यदि आप एन्कोडिंग निर्दिष्ट नहीं करते हैं जबकि एंड() डिफ़ॉल्ट रूप से utf8 पर डिफ़ॉल्ट हैं। मैं 100% निश्चित नहीं हूं लेकिन फ़ाइल से कच्चा डेटा utf8 एन्कोडेड स्ट्रिंग की तुलना में कम लंबाई लौटा सकता है जो उत्सर्जित करता है।

मैंने आपकी त्रुटि को दोबारा बनाने की कोशिश की और असफल रहा ताकि आपको नोड के अपने संस्करण को अपग्रेड करने की आवश्यकता हो। मैं github से नवीनतम कोड का उपयोग कर रहा हूँ।

1

मैंने इसे अभी भी देखा है। वही सेटअप - एचटीटीपीएस, गिट रेपो से नवीनतम नोड।

एक बड़ी फ़ाइल (170k) कभी भी सही ढंग से भेजने को पूरा नहीं करती है। मैंने एसिंक से सिंक करने के लिए स्विच करने की कोशिश की लेकिन इससे कोई फर्क नहीं पड़ता। केवल एक चीज जिसने इसे अभी तक तय किया है, फ़ाइल को छोटा बना रहा था। यह एक बड़ा फ्लॉपी जेपीजी था इसलिए यह करना आसान था। समस्या गायब हो गई।

0

इस समस्या को नोड.जे.एस. के नवीनतम संस्करण में हल किया जाना चाहिए। क्या आप इसका परीक्षण v0.4.2 पर कर सकते हैं?