पर सर्वलेट प्रतिक्रिया में ओवरराइड किए गए हैं मेरे पास ऐप इंजन पर एक सर्वलेट है जो छवियों परोसता है।कैश से संबंधित HTTP शीर्षलेख ऐप इंजन
सर्वलेट HTTP हेडर मानों को सही ढंग से सेट करता है यह इंगित करने के लिए कि छवियों को कैश किया जाना चाहिए। लेकिन ऐप इंजन इन शीर्षकों को ओवरराइड करता है जिसके परिणामस्वरूप छवियों को कैश नहीं किया जाता है।
ध्यान दें कि एक ही कोड पहले काम करता था, लेकिन यह अब कुछ समय के लिए काम नहीं करता है।
एपीपी इंजन प्रलेखन कहा गया है कि Cache-Control
, Expires
और Vary
हेडर सर्वलेट द्वारा निर्धारित कर रहे हैं, वे असंशोधित छोड़ दिया जाएगा:
response.setContentType("image/jpeg");
//response.setDateHeader("Expires", new Date().getTime() + 60L*24*60*60*1000); // 60 days cache time
//response.addHeader("Cache-Control", "public, max-age=5184000"); // 5_184_000 sec = 60 days cache time
response.addHeader("Cache-Control", "public, max-age=90000"); // 90_000 sec = 25 hours cache time
response.getOutputStream().write(data); // Data is a byte array containing the JPEG image data
(मैं: https://developers.google.com/appengine/docs/java/runtime#Responses
यह मेरा नमूना कोड है इसमें सभी को डालने की कोशिश की गई है।)
HTTP अनुरोध-प्रतिक्रिया की जांच, प्रतिक्रिया में निम्नलिखित हे ders:
HTTP/1.1 200 OK
status: 200 OK
version: HTTP/1.1
cache-control: public, max-age=90000
cache-control: no-cache, must-revalidate
content-length: 6777
content-type: image/jpeg
date: Sat, 05 Jan 2013 14:11:47 GMT
expires: Fri, 01 Jan 1990 00:00:00 GMT
pragma: no-cache
server: Google Frontend
आप देख सकते हैं, App इंजन cache-control
, expires
और pragma
हेडर कैशिंग अक्षम करने सम्मिलित करता है। ध्यान दें कि अनुरोध के कारण cookie
शीर्षलेख है। लेकिन https://developers.google.com/appengine/docs/java/runtime#Responses पर दस्तावेज़ भी बताते हैं कि इस मामले में (जब कुकी सेट की जाती है), ऐप इंजन कैशिंग को निजी होने के लिए कॉन्फ़िगर करेगा ताकि ब्राउज़र अभी भी इसे कैश करने में सक्षम हों लेकिन इंटरमीडिएट प्रॉक्सी सर्वर नहीं। कुकीज मेरे द्वारा भी नहीं जोड़े गए हैं लेकिन Google Analytics कोड (मैंने पृष्ठ पर Google Analytics सक्षम किया है)।
मैं क्या गलत कर रहा हूं? मैं सर्वलेट प्रतिक्रिया के उचित कैशिंग कैसे प्राप्त कर सकता हूं?
संपादित करें: आगे की जांच से पता चला कि कुकीज़ अनुरोध करने के लिए जोड़ रहे हैं क्योंकि मैं गूगल प्रमाणीकरण का उपयोग करें, और यदि कोई उपयोगकर्ता उसकी/उसके Google खाते का उपयोग में लॉग इन किया है, तो उपयोगकर्ता से संबंधित कुकीज़ जोड़ रहे हैं, जाहिर है। यदि कोई उपयोगकर्ता लॉग इन नहीं है, तो कैशिंग ओवरराइड नहीं है। तो मेरा अगला सवाल यह है कि क्या उपयोगकर्ता Google खाते से लॉग इन होने पर सर्वलेट-सेवित छवियों को कैश करने का कोई तरीका है?
संपादित करें, समाधान: Google ऐप इंजन केवल कैशिंग को अक्षम करता है यदि ऐप का कोई व्यवस्थापक उपयोगकर्ता क्लाइंट है। इस मामले में, ऐप इंजन स्वचालित रूप से केवल व्यवस्थापक के लिए इच्छित शीर्षलेखों को सम्मिलित करता है, उदाहरण के लिए अनुरोध की अनुमानित लागत। यह निजी जानकारी है इसलिए समझ में आता है कैशिंग अक्षम है।
यह 25 घंटे है, है ना? अधिकतम आयु सेकंड निर्दिष्ट करता है। 90000sec = 1500min = 25 घंटे – NagyI
@NagyI दाएं, वह एक टाइपो था। – icza