2010-11-25 13 views
16

मैं कुकीज़ की उपस्थिति में भी कुछ पृष्ठों को कैश करने के लिए वार्निश का उपयोग करना चाहता हूं।वर्निश को अनदेखा कैसे करें, कुकीज़ को हटाएं

  1. एक अनाम उपयोगकर्ता उपयोगकर्ता में कुछ पेज
  2. एक लॉग इन देखे जा रहे प्रकाश अनुकूलन के साथ कुछ पेज देख रहा है: वहाँ 3 संभावनाएं है कि मैं की देखभाल की जरूरत है। ये अनुकूलन सभी एक हस्ताक्षरित कुकी में संग्रहीत हैं और गतिशील रूप से जावास्क्रिप्ट द्वारा आबादी में हैं। भिन्न-कुकी http शीर्षलेख सेट नहीं है।
  3. एक लॉग इन उपयोगकर्ता डेटाबेस से अनुकूलित डेटा के साथ कुछ पेज देख रहा है। भिन्न-कुकी http शीर्षलेख सेट है।

उम्मीद व्यवहार होगा:

  1. कैश पेज। वार्निश को संभालने के लिए यह सबसे बुनियादी परिदृश्य है।
  2. पृष्ठ को कैश करें और कुकी को हटाएं क्योंकि कुछ जावास्क्रिप्ट तर्क को इसकी आवश्यकता है।
  3. इस पृष्ठ को कभी भी कैश न करें क्योंकि अलग-अलग कुकी कुकी सामग्री को सिग्नल कर रही है, इस पृष्ठ के आउटपुट को प्रभावित करेगी।

मैंने वार्निश पर कुछ दस्तावेज़ पढ़े हैं और मैं यह नहीं बता सकता कि यह डिफ़ॉल्ट व्यवहार है या यदि कुछ सेटअप है तो मुझे ऐसा करने के लिए वीसीएल में करना होगा।

+1

क्रॉस-साइट पोस्टिंग के रूप में बंद: http://serverfault.com/q/205768/72348 – casperOne

उत्तर

17

केवल सत्र प्रत्येक ग्राहक के लिए अद्वितीय हैं, जरूरी नहीं कि कुकीज़।

वार्निश के साथ आप क्या समझना चाहते हैं और संभव है, यह केवल अपने स्वयं के वीसीएल को सावधानीपूर्वक तैयार करने का विषय है। कृपया default.vcl के निम्नलिखित भागों पर ध्यान देना:

sub vcl_recv { 
    ... 
    if (req.http.Authorization || req.http.Cookie) { 
     /* Not cacheable by default */ 
     return (pass); 
    } 
} 


sub vcl_hit { 
    if (!obj.cacheable) { 
     return (pass); 
    } 
    ... 
} 


sub vcl_fetch { 
    if (!beresp.cacheable) { 
     return (pass); 
    } 
    if (beresp.http.Set-Cookie) { 
     return (pass); 
    } 
    ... 
} 

आप अपनी खुद की तर्क के साथ इन भागों को बदलने के लिए; यानी अपने स्वयं के vcl_ कार्यों को परिभाषित करें। डिफ़ॉल्ट रूप से, कुकीज़ के साथ अनुरोध (vcl_recv) और प्रतिक्रियाएं (vcl_fetch) कैशेबल नहीं हैं। आप अपने बैक-एंड एप्लिकेशन को सर्वश्रेष्ठ जानते हैं और आपको सामान्य विशिष्ट कैशिंग तर्क को इस विशिष्ट मामले में फिर से लिखना चाहिए। यही है, आपको परिभाषित करना चाहिए कि किस मामले में वार्निश एक लुकअप करता है, गुजरता है या डिलीवर करता है।

आपके मामले में, आपके पास अलग-अलग कुकी के बिना पृष्ठ (केस 1 और 2) होंगे, जो सभी के द्वारा कैश और साझा किए जाएंगे (कुकीज के साथ अनुरोध/बिना); बस req.http.Cookie vcl_recv में बुरा मत मानो। मैं पेजों (केस 3) को अलग-अलग कुकी के साथ कैश नहीं करूंगा-कम से कम लंबे समय तक नहीं, क्योंकि उन्हें बिल्कुल साझा नहीं किया जा सकता है; vcl_fetch में 'पास' करें।

+0

तो * vcl_fetch * में, मैं करना चाहता हूं: * अगर (beresp.http.Vary ~ "कुकी") { वापसी (पास); } *। –

+1

हां। और vcl_recv में आपको डिफ़ॉल्ट व्यवहार पर वापस नहीं आना चाहिए, लेकिन req.http.Cookie सेट होने पर भी "लुकअप" लुकअप करें। मैं आपके आवेदन को पूरी तरह से समझ नहीं पा रहा हूं, लेकिन मैं सेट-कुकी करने वाले कैशिंग प्रतिक्रियाओं के साथ देखता हूं। कुछ सेट-कुकी सामान (और इसे कैश नहीं) करने के लिए यह समझ में आता है, और जावास्क्रिप्ट के साथ कैश प्रतिक्रियाएं प्रदान करता है जो चीजों के मूल्यों के आधार पर चीजें करता है (केवल क्लाइंट पर भरोसा करें जहां आप ग्राहक पर भरोसा करते हैं)। – ivy

+0

मुझे लगभग एक ही समस्या है। मेरा vcl_recv एक रिटर्न (लुकअप) के साथ समाप्त होता है, और मेरा vcl_fetch यह है: उप vcl_fetch { \t अगर (req.backend == dinamic) { \t \t esi; \t} \t यदि (req।बैकएंड == स्थैतिक) { \t \t unset beresp.http.set-cookie; \t}} लेकिन फिर भी, डायनामी बैकएंड (जिसे कैश किया जाना चाहिए) के सभी अनुरोध हैं ... कोई विचार नहीं? मैं कस्टम कैशिंग बनाने के लिए एएसआई का उपयोग करने की कोशिश कर रहा हूं, लेकिन वार्निश के बाद से यह बेकार हो रहा है जो मेरे आवेदन आउटपुट से आने वाली किसी भी चीज़ को कैश नहीं कर रहा है। – Tiago

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