पेज कैशिंग, CDN और सहमति बैनर: ग़लत सहमति स्थिति परोसने से कैसे बचें
तेज़ पेज, ग़लत सहमति
पेज कैशिंग गति और होस्टिंग लागत के लिए आप जो सबसे अच्छी चीज़ें कर सकते हैं उनमें से एक है। यह बिना पता चले सहमति सेटअप को तोड़ने के सबसे आसान तरीकों में से भी एक है। कैश ठीक वही करता है जो उसे कहा जाता है: वह एक रिस्पॉन्स को एक बार सहेजता है और उसी कुंजी से मेल खाने वाले हर व्यक्ति को परोसता है। अगर उस सहेजे गए रिस्पॉन्स में किसी एक विज़िटर की सहमति या स्थान से जुड़ा कुछ भी है, तो अगला विज़िटर भी वही पाता है।
यह गाइड उन कैशिंग परतों को कवर करती है जो आमतौर पर प्रकाशक साइट के सामने होती हैं — CDN एज कैश, फ़ुल-पेज कैशिंग प्लगइन, रिवर्स प्रॉक्सी, सर्विस वर्कर और स्वयं ब्राउज़र — और यह कि इनमें से हर एक को ग़लत सहमति अनुभव परोसने से कैसे रोका जाए।
मूल नियम: सहमति को कैश्ड HTML से बाहर रखें
सबसे सुरक्षित आर्किटेक्चर कैश्ड HTML पेज को सहमति-तटस्थ रेंडर करता है। पेज में CMP लोडर और आपके टैग ब्लॉक्ड या प्रतीक्षा अवस्था में होते हैं, लेकिन इस विशेष विज़िटर के बारे में कोई निर्णय नहीं होता। फिर CMP ब्राउज़र में चलता है, सहेजा गया चुनाव पढ़ता है, तय करता है कि बैनर दिखाना है या नहीं, और उसी के अनुसार टैग जारी करता है।
समस्याएँ तब शुरू होती हैं जब सर्वर रेंडर के समय सहमति के निर्णय लेता है, उदाहरण के लिए:
- कोई थीम या प्लगइन जो विज्ञापन या एनालिटिक्स टैग केवल तब प्रिंट करता है जब सहमति कुकी मौजूद हो;
- सर्वर-साइड कोड जो उन विज़िटरों के लिए बैनर मार्कअप छोड़ देता है जो पहले ही चुनाव कर चुके हैं;
- टेम्पलेट जो विज़िटर की सहमति स्थिति को इनलाइन स्क्रिप्ट वेरिएबल में एम्बेड करते हैं।
एक बार वह पेज कैश हो जाए, तो पहले विज़िटर की स्थिति सबकी स्थिति बन जाती है। जिस विज़िटर ने ट्रैकिंग अस्वीकार की थी उसे ऐसा पेज मिल सकता है जिसमें टैग पहले से सक्रिय हैं, या किसी नए विज़िटर को बैनर कभी दिख ही न पाए क्योंकि कैश्ड प्रति ऐसे व्यक्ति से आई थी जिसने उसे पहले ही बंद कर दिया था।
“Vary: Cookie” शायद ही कभी जवाब क्यों होता है
प्रति-विज़िटर कंटेंट का पाठ्यपुस्तकीय समाधान कैश को कुकी हेडर पर vary करने को कहना है। व्यवहार में विज़िटरों के पास अनूठे मानों वाली कई कुकीज़ होती हैं, इसलिए पूरे कुकी हेडर पर vary करने से आपकी कैश हिट दर आमतौर पर लगभग शून्य हो जाती है। कुछ CDN आपको कैश कुंजी एक अकेली कुकी वैल्यू से बनाने देते हैं, जो तब चल सकता है जब आपकी सहमति कुकी की संभावित अवस्थाएँ थोड़ी हों, लेकिन यह जटिलता जोड़ता है और कैश्ड प्रतियों की संख्या फिर भी बढ़ाता है। निर्णय को ब्राउज़र में ले जाना सरल है और कैश को कुशल रखता है।
एज पर भूगोल
कई प्रकाशक क्षेत्र के अनुसार अलग बैनर दिखाते हैं: EU और UK के लिए ऑप्ट-इन बैनर, अमेरिकी राज्यों के लिए ऑप्ट-आउट नोटिस, और अन्यत्र कुछ हल्का। अगर सर्वर विज़िटर के IP पते से वेरिएंट चुनता है और वह पेज कैश हो जाता है, तो किसी यूरोपीय पाठक को कैश्ड अमेरिकी पेज मिल सकता है, या इसका उलटा।
तीन पैटर्न इससे बचाते हैं:
- क्लाइंट-साइड जियोलोकेशन। CMP को ब्राउज़र में क्षेत्र तय करने दें, ताकि कैश्ड HTML सबके लिए एक जैसा रहे।
- कैश कुंजी में देश। अगर आपको एज पर ही तय करना है, तो अपने CDN द्वारा दिया गया देश कोड कैश कुंजी में शामिल करें। आपको प्रति देश एक कैश्ड प्रति मिलती है, जो पूर्वानुमेय है।
- अनकैश्ड एज लॉजिक। क्षेत्रीय निर्णय को ऐसे एज फ़ंक्शन में चलाएँ जो अन्यथा कैश्ड पेज में एक छोटा, अनकैश्ड मान डालता है।
जो भी चुनें, उसे दर्ज करें। जियो बग को दोहराना सबसे कठिन में से है, क्योंकि वे केवल किसी एक जगह के विज़िटरों के लिए दिखते हैं जिन्हें संयोग से किसी दूसरी जगह के व्यक्ति द्वारा कैश किया गया पेज मिल जाता है।
स्वयं CMP स्क्रिप्ट को कैश करना
CMP लोडर को लंबे समय तक कैश करना प्रदर्शन के लिए अच्छा है, लेकिन कॉन्फ़िगरेशन बदलने पर इसकी क़ीमत होती है। अगर आप वेंडर, उद्देश्य या बैनर पाठ अपडेट करते हैं और स्क्रिप्ट या कॉन्फ़िगरेशन फ़ाइल एक साल के लिए कैश है, तो कुछ विज़िटर पुराना संस्करण देखते रहेंगे। जाँचें कि आपका CMP अपनी फ़ाइलों को वर्ज़न कैसे करता है: बदलता फ़ाइल नाम या वर्ज़न पैरामीटर आपको आक्रामक रूप से कैश करने देता है और फिर भी बदलाव तुरंत रोल आउट करने देता है। यह भी पुष्टि करें कि आपका अपना CDN तृतीय-पक्ष स्क्रिप्ट URL से क्वेरी स्ट्रिंग नहीं हटाता, अगर CMP उन पर निर्भर है।
सर्विस वर्कर और ऑफ़लाइन कैश
प्रोग्रेसिव वेब ऐप परत वाली साइटें अक्सर HTML को सर्विस वर्कर में कैश करती हैं। वही नियम लागू होता है: ऐसा पेज कभी न सहेजें जो किसी विशिष्ट सहमति निर्णय को दर्शाता हो। सहमति से जुड़े एंडपॉइंट और प्रेफ़रेंस सेंटर पेज को सर्विस वर्कर कैशिंग से बाहर रखें, और सुनिश्चित करें कि नया CMP कॉन्फ़िगरेशन हमेशा फ़ेच किया जा सके।
बैक/फ़ॉरवर्ड कैश
आधुनिक ब्राउज़र हाल में देखे गए पेजों को मेमोरी में रखते हैं ताकि बैक बटन उन्हें तुरंत बहाल कर दे। अगर कोई विज़िटर एक पेज पर प्रेफ़रेंस सेंटर खोलता है, सहमति वापस लेता है, फिर बैक दबाता है, तो बहाल हुए पेज में पहले के टैग अब भी चल रहे हो सकते हैं। pageshow इवेंट को सुनें और उसकी persisted प्रॉपर्टी जाँचें: जब पेज इस कैश से बहाल हो, तो सहेजी गई सहमति स्थिति दोबारा पढ़ें और उसके अनुरूप टैग रोकें या शुरू करें।
एक परीक्षण प्रक्रिया
- साफ़ सत्र में एक पेज लोड करें, अस्वीकार करें, फिर दूसरा पेज लोड करें और पुष्टि करें कि कोई ट्रैकिंग टैग फ़ायर नहीं होता।
- दूसरे साफ़ ब्राउज़र के साथ दोहराएँ और पुष्टि करें कि बैनर दिखता है, जो साबित करता है कि वह कैश में गायब नहीं हुआ।
- रिस्पॉन्स हेडर जाँचें कि पेज कैश से परोसे जा रहे हैं या नहीं, और सहमति कुकी के साथ और बिना HTML की तुलना करें — वह समान होना चाहिए।
- कैश पर्ज करने के बाद कम से कम दो क्षेत्रों से परीक्षण करें, फिर कैश गर्म होने के बाद दोबारा।
- सहमति वापस लें, बैक बटन उपयोग करें, और सत्यापित करें कि टैग रुक जाते हैं।
मुख्य बातें
- कैश्ड HTML सहमति-तटस्थ होना चाहिए; CMP को ब्राउज़र में निर्णय लेने दें।
- पूरे कुकी हेडर पर vary करने से बचें; यह हिट दर नष्ट कर देता है।
- अगर बैनर क्षेत्र के अनुसार अलग हों, तो क्लाइंट-साइड तय करें या कैश कुंजी में देश जोड़ें।
- CMP फ़ाइलों को वर्ज़न करें ताकि लंबी कैश अवधि कॉन्फ़िगरेशन बदलावों में देरी न करे।
- सर्विस वर्कर और बैक/फ़ॉरवर्ड कैश को संभालें, और केवल पर्ज के बाद नहीं, कैश गर्म होने पर भी परीक्षण करें।