तिथि और आयु शीर्षकों के आधार पर कैशिंग प्रतिक्रियाएं
हम कुछ व्यवहार देख रहे हैं, जहाँ हम OkHttp में प्रतिक्रियाओं को कैशिंग नहीं कर रहे हैं, और हर बार सर्वर को मार रहे हैं। हालांकि, भविष्य में प्रतिक्रिया का समय समाप्त हो रहा है, इसलिए आदर्श रूप से इसे कैश किया जाएगा।
यहाँ शीर्ष लेख का एक सरल उदाहरण है जिसे हम प्रतिक्रिया में देख रहे हैं (अनुरोध भेजा गया था और प्रतिक्रिया प्राप्त हुई थी Sat, 16 Jan 2021 00:40:36 GMT
):
date: Sat, 16 Jan 2021 00:40:36 GMT
age: 6
expires: Sat, 16 Jan 2021 00:40:40 GMT
last-modified: Sat, 16 Jan 2021 00:40:30 GMT
CacheStrategy को देखने से जो मैंने देखा है, समस्या यह है कि यह एक साथ तिथि + आयु जोड़ता है यह देखने के लिए कि क्या यह समाप्ति का समय है। इस मामले में 00:40:36 + 6 = 00:40:42 > 00:40:40
, इसलिए यह समाप्त होता है कैश में नहीं जोड़ा जा रहा है।
इसलिए मुझे लगता है कि आदर्श रूप में, या तो प्रतिक्रिया की तारीख अंतिम-संशोधित के बराबर होगी (इस मामले में Sat, 16 जनवरी 2021 00:40:30 GMT), या हमें अंतिम-संशोधित का उपयोग करने के लिए एक कस्टम CacheStrategy की आवश्यकता होगी इन गणनाओं के लिए दिनांक।
अगर किसी को इस बात की कोई जानकारी है कि क्या मैं कोई गलत धारणा बना रहा हूं, या यदि उपरोक्त विकल्पों में से एक बेहतर है, तो कृपया मुझे बताएं। मैंने दिनांक / आयु हेडर के कुछ स्पेक्स को देखा है और यह मेरे लिए थोड़ा अस्पष्ट है कि उन्हें इस परिदृश्य में क्या होना चाहिए।
मैंने OkHttp में कैशिंग व्यवहार को डीबग करना भी थोड़ा मुश्किल पाया है, अभी मैं सिर्फ इसे ट्रेस करने के लिए सशर्त ब्रेकपॉइंट्स का उपयोग कर रहा हूं, लेकिन अगर किसी को बेहतर विचार है तो मैं भी इसकी सराहना करूंगा।
जवाब
expires
हेडर को एक कैश-कंट्रोल हेडर से बदलें जो अधिकतम आयु निर्देश सेट करता है:
Cache-Control: max-age=86400
यह OkHttp को 24 घंटे के लिए प्रतिक्रिया को कैश करने का कारण बना देगा, भले ही वह सेवा के दौरान हो। एक्सपायर हेडर समस्याग्रस्त था क्योंकि CloudFlare ने इसे एक विशिष्ट समाप्ति समय के रूप में माना था, अवधि नहीं।
मैं max-age
आपके चयन के साथ "कैश-कंट्रोल" हेडर का उपयोग करने का प्रयास करने की सलाह दूंगा ।
ऐसा करने का मुख्य कारण यह है क्योंकि यह आधिकारिक दस्तावेज से एक उदाहरण में दिखाया गया है, देखें: https://square.github.io/okhttp/interceptors/#rewriting-responses
.header("Cache-Control", "max-age=60")
ऐसा करने का पसंदीदा तरीका स्पष्ट रूप से बैक-एंड पर है। यदि आप बैक-एंड को संशोधित नहीं कर सकते हैं, तो मुझे लगता है कि एक इंटरसेप्टर दूसरा विकल्प होगा। ध्यान दें कि एक अंतिम विकल्प है जिसे हतोत्साहित किया जाता है।
आपके बैकएंड के अलावा, मैं उन विकल्पों पर भी नज़र डालूंगा जो क्लाउडफ़ेयर स्वयं प्रदान करता है: https://support.cloudflare.com/hc/en-us/articles/360021806811-Getting-Started-with-Cloudflare-Caching