2012-11-10 8 views
5

मेरे नोडजेएस ऐप में, मैं क्लाइंट में लौटने वाली सभी सामग्री के लिए ईटैग जेनरेट करना चाहता हूं। मुझे ईटाग को तिथि की बजाय फ़ाइल की वास्तविक सामग्री के आधार पर होने की आवश्यकता है, ताकि अलग-अलग नोड प्रक्रियाओं में एक ही फ़ाइल में एक ही ईटाग हो।nodeJS में क्रिप्टो के साथ ईटाग को ठीक से उत्पन्न करने के लिए मुझे किस एन्कोडिंग का उपयोग करना चाहिए?

अभी, मैं निम्नलिखित कर रहा हूँ:

var fs = require('fs'), crypto = require('crypto'); 
fs.readFile(pathToFile, function(err, buf){ 
    var eTag = crypto.createHash('md5').update(buf).digest('hex'); 
    res.writeHead(200, {'ETag': '"' + eTag + '"','Content-Type':contentType}); 
    res.end(buf); 
}); 

मुझे यकीन है कि क्या एन्कोडिंग मैं आदेश जगह में एक उचित प्रणाली है करने के लिए अलग अलग क्रिप्टो कार्यों के लिए उपयोग करते हुए किया जाना चाहिए नहीं कर रहा हूँ। क्या मुझे hex के अलावा कुछ और उपयोग करना चाहिए? क्या मुझे fs.readFile कॉल हेक्स एन्कोडेड बफर वापस करने के लिए मिलना चाहिए? यदि ऐसा है, तो उपयोगकर्ताओं को लौटाई गई सामग्री पर इतना असर पड़ेगा?

बेस्ट, और धन्यवाद,
सामी

+1

यह मदद कर सकता है: http://stackoverflow.com/q/4533 –

उत्तर

7

आप इसे ठीक कर रहे हैं। किसी विशेष प्रारूप में फ़ाइल को एन्कोड करने का कोई कारण नहीं है, और आउटपुट के लिए हेक्स का उपयोग करना काफी मानक है। आवश्यकताओं, शिथिल तौर पर, कर रहे हैं:

  • ही दस्तावेज़ हमेशा एक ही ETag दस्तावेज़ में कोई परिवर्तन
  • ETag में बदलाव
  • ETag डेटा एक HTTP हेडर
  • में बड़े करीने से फिट होना चाहिए का कारण बनता है लौटना चाहिए
+0

मुझे नहीं पता कि node.js हैश कार्यान्वयन कितना तेज़ है - आपको इसे अपने लिए मापने की आवश्यकता होगी। यदि हैश उत्पन्न करने का समय बहुत लंबा है, तो आप फ़ाइल नाम, संशोधन समय और हैश को कहीं भी कैशिंग करने के बारे में सोच सकते हैं ताकि आपको इन चीजों को फिर से लागू न करना पड़े। – slashingweapon

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

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