2013-03-03 9 views
21

में अक्षम ETag शीर्षलेख हम अपने Node.js एक्सप्रेस आवेदन में सभी HTTP प्रतिक्रियाओं से etag हैडर दूर करने के लिए एक की जरूरत है। हमारे पास एक्सप्रेस में लिखी एक वेब सेवा एपीआई है जहां क्लाइंट पर अप्रत्याशित परिणाम देखे जाते हैं जब हम ईटैग भेजते हैं और ग्राहक if-none-match शीर्षलेख वापस भेजता है।एक्सप्रेस Node.js

हम app.disable('etag') और res.removeHeader('etag'), लेकिन न तो काम की कोशिश की है; ऐप परवाह किए बिना हेडर भेजता है।

सभी प्रतिक्रियाओं में इस शीर्ष लेख को निष्क्रिय करने के किसी भी अन्य माध्यम है?

उत्तर

34

app.disable('etag') अब काम करना चाहिए, वहाँ एक पुल अनुरोध किया गया है इस से निपटने के लिए विलय कर दिया:

https://github.com/visionmedia/express/commit/610e172fcf9306bd5812bb2bae8904c23e0e8043

अद्यतन: के रूप में Bigood टिप्पणी में कहा काम करने के नए रास्ते पीछा कर रहा है https://github.com/strongloop/express/releases/tag/3.9.0

: संस्करण 3.9.0 के साथ हुई

app.set('etag', false); // turn off 

बदलें

ईटैग को सेट करने के बारे में अधिक विकल्प के लिए यहां 4.x दस्तावेज़ों की जांच करें: http://expressjs.com/4x/api.html#app.set

+0

कूल। सही उत्तर के रूप में चिह्नित! – Raj

+8

क्या केवल कुछ निश्चित अंतराल के लिए etags को अक्षम करने का कोई तरीका है? मैं अपने एपीआई एंडपॉइंट्स पर ईटैग नहीं चाहता लेकिन मुझे स्थिर सामग्री पर ईटैग चाहिए। – Zambonilli

+0

3.9.0 के बाद से इस तरह से काम नहीं करता है: https://github.com/strongloop/express/releases/tag/3.9.0 – Bigood

2

मुझे ऐसा लगता है कि आपकी समस्या का वास्तविक समाधान क्यों यह etags की वजह से अजीब तरह से व्यवहार कर रहा है यह पता लगाने की होगी।

हालांकि आपके प्रश्न का उत्तर करने के लिए, एक्सप्रेस वर्तमान में etags हेडर अक्षम करने के लिए समर्थन नहीं है। वास्तव में इसकी चर्चा की गई और in this pull request विलय हो गया, लेकिन बाद में इसे वापस कर दिया गया। यदि आपको वास्तव में इसकी आवश्यकता है और रूट समस्या को ठीक करने का प्रयास नहीं करना चाहते हैं, तो आप हमेशा उस पैच को लागू कर सकते हैं और वहां से जा सकते हैं।

+1

वाई! धीमा सुझाव देता है कि आप etags को हटा दें। – chovy

+0

मैंने देखा कि पुल अनुरोध भी है, लेकिन एक मानक विधि की उम्मीद कर रहा था जिसे एक संशोधन के बजाय ढांचे द्वारा समर्थित किया गया था जो भविष्य में अच्छी तरह से समर्थित नहीं होगा। – Raj

+1

ऐसा लगता है कि वे इसे में खींच वापस समाप्त हो गया: https://github.com/visionmedia/express/pull/1694 –

2

एक्सप्रेस प्रतिक्रिया.जेएस को देखते हुए, एटैग केवल तभी भेजे जाते हैं जब अनुरोध विधि प्राप्त होती है। आप प्रतिक्रिया.send() को कॉल करने से पहले request.method को किसी अन्य चीज़ पर सेट करके प्रतिक्रिया में ईटैग भेजने से रोक सकते हैं।

जैसे:

app.get('/path/returnsJSON', function(req, res){ 
/* HACK to workaround the framework sending e-tags and "304 NOT MODIFIED" responses */ 
req.method="NONE"; // was "GET" 
res.status(200).send({data:1}); 
}); 

यह मेरे लिए ठीक काम किया।

19
app.disable('etag') 

यह सभी अनुरोधों के लिए ETag शीर्षलेख को निष्क्रिय कर देगा, लेकिन स्थिर सामग्री के लिए नहीं। निम्नलिखित स्थिर सामग्री के लिए यह करता है:

app.use(express.static(path.join(__dirname, 'public'), { 
     etag: false 
})); 
+1

यह महत्वपूर्ण है क्योंकि इसे आसानी से भुला दिया जाता है – migg

+0

यह दस्तावेज नहीं है, लेकिन यह 'res.sendFile ('...', {etag: false}) के लिए भी काम करता है। मेरे मामले में, 'app.disable (' etag ') 'और' app.set (' etag ', false)' काम नहीं किया। – youen

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