2014-07-03 6 views
23

Expressjs में एक etag काम कैसे स्वचालित रूप से etags भेजते हैं। मैं जानना चाहता हूं कि एटैग कैसे उत्पन्न होता है .. यह उस सामग्री पर आधारित है जो नियमित रूप से प्राप्त होने से गतिशील रूप से उत्पन्न होता है। या जिस तरह से मैं इसे उत्पन्न कर सकता हूं, सामग्री (गतिशील सामग्री - डीबी से) उत्पन्न करने की प्रक्रिया के माध्यम से भी नहीं जा सकता है और उसी तरह एटैग को पास कर सकता हूं।Expressjs

एक मिडलवेयर हो सकता है जो यह जांचने के साथ शुरू होता है कि यह वैध सत्र आईडी है या नहीं, उसी क्लाइंट को वापस भेज दें जो क्लाइंट यूआरएल + सत्र आईडी के आधार पर देता है या हो सकता है .. यह वैसे ही अद्वितीय होगा। और पूरे डीबी कॉल और उन सभी चीजों के माध्यम से वहां अनुरोध को समाप्त करें। इस मामले में मुझे पता होना चाहिए कि ग्राहक 304 कॉल कर रहा है।

मैं समाप्ति टैग के साथ जा सकता हूं। लेकिन जब सत्र समाप्त हो जाता है। अगर कोई यूआरएल खोल रहा है तो उसे अनुमति नहीं देनी चाहिए। इसलिए मैं सोच रहा हूं कि एटैग सत्र आईडी के आधार पर भी होना चाहिए। अगर संशोधित इस गतिशील सामग्री परिदृश्य में काम कर सकता है। इसका इस्तेमाल किया जा सकता है।

+0

है तो आप अपने दूसरे और तीसरे कृपया स्पष्ट कर सकते हैं पैराग्राफ? आपकी विशेष समस्या पर अधिक जानकारी प्राप्त करना अच्छा होगा। – stellarchariot

उत्तर

23

लेखन के समय (8 जुलाई 2014), CRC32 (source) का उपयोग करके कमजोर ईटीएजी उत्पन्न होते हैं और मजबूत ईटीएजी एमडी 5 (source) का उपयोग करके उत्पन्न होते हैं।

Based on what one of the contributors to Express says, आप चाहे द्वारा मजबूत या कमजोर ETags उपयोग करने के लिए निर्दिष्ट कर सकते हैं:

app.enable('etag') // use strong etags 
app.set('etag', 'strong') // same 
app.set('etag', 'weak') // weak etags 

ऐसा लगता है कि आप भी तो जैसे ETags करने के लिए अपने स्वयं के कस्टम समारोह निर्दिष्ट कर सकते हैं:

app.set('etag', function(body, encoding){ /* return valid etag */ }); 

एनपीएम पैकेज fresh भी देखने लायक है, क्योंकि इसका उपयोग ताजाता जांच के लिए एक्सप्रेस में किया जाता है (source1, source2)।

अपने आवेदन के लिए, याद रखें कि आप किसी भी प्रतिक्रिया शीर्षलेख को ओवरराइड कर सकते हैं उदा। res.send() (या समान कार्य) का आह्वान करने से पहले res.set('etag', 'my-awesome-etag-value')। (फायदे और नुकसान सहित) आगे की चर्चा यहां पाया जा सकता: https://github.com/visionmedia/express/issues/2129#issue-34053148

+8

मैं यह इंगित करना चाहता हूं कि एक्सप्रेस 4.X [डॉक्स] (http://expressjs.com/api.html#app.set) के अनुसार, डिफ़ॉल्ट etag प्रकार ईटैग सक्षम करते समय 'कमजोर' है। – bakavic

+2

अद्यतन: ईटीएजी पीढ़ी [jshttp/etag] (https://github.com/jshttp/etag) मॉड्यूल द्वारा किया जाता है। संस्करण 1.7 (2015-06-08) हमेशा सीआरसी 32 के बजाय एमडी 5 का उपयोग करता है क्योंकि सीआरसी 32 टक्कर से ग्रस्त है। अगला संस्करण हमेशा MD5 के बजाय SHA1 का उपयोग करेगा क्योंकि MD5 FIPS-compliant नहीं है। आखिरकार, एकमात्र चीज "कमजोर" ईटीएजी पर "डब्ल्यू /" उपसर्ग सेट करती है। जबकि एक्सप्रेस "डब्ल्यू /" के लिए डिफ़ॉल्ट है, यह तकनीकी रूप से एक मजबूत ईटाग है क्योंकि हैश की गणना इसके अर्थात् सामग्री के विपरीत शरीर बाइट्स पर की जाती है। यदि आप अपने ऐप के लिए कमजोर ईटीएजी कैल्स को लागू करने में सक्षम हैं, तो यह संभावित रूप से बड़ा पेर्फ बूस्ट है। – ZachB

3

एक्सप्रेस 4.x क्योंकि डिफ़ॉल्ट ETag प्रकार कमजोर

https://expressjs.com/en/api.html#etag.options.table

app.enable('etag') // use weak etags 
app.set('etag', 'weak') // use weak etags also 
app.set('etag', 'strong') // use strong etags 

// custom etag generation 
app.set('etag', function (body, encoding) { 
    return generateHash(body, encoding); // consider the function is defined 
}); 
संबंधित मुद्दे