2013-01-05 15 views
6

पर सर्वलेट प्रतिक्रिया में ओवरराइड किए गए हैं मेरे पास ऐप इंजन पर एक सर्वलेट है जो छवियों परोसता है।कैश से संबंधित 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 ऐप इंजन केवल कैशिंग को अक्षम करता है यदि ऐप का कोई व्यवस्थापक उपयोगकर्ता क्लाइंट है। इस मामले में, ऐप इंजन स्वचालित रूप से केवल व्यवस्थापक के लिए इच्छित शीर्षलेखों को सम्मिलित करता है, उदाहरण के लिए अनुरोध की अनुमानित लागत। यह निजी जानकारी है इसलिए समझ में आता है कैशिंग अक्षम है।

+0

यह 25 घंटे है, है ना? अधिकतम आयु सेकंड निर्दिष्ट करता है। 90000sec = 1500min = 25 घंटे – NagyI

+0

@NagyI दाएं, वह एक टाइपो था। – icza

उत्तर

4

दस्तावेज़ों के मुताबिक, यदि लॉग-इन उपयोगकर्ता एक व्यवस्थापक है तो हेडर को केवल ओवरराइट किया जाना चाहिए। क्या आपने यह जांच लिया कि क्या यह मामला है?

+0

हां, यह बिल्कुल मामला है। मैंने इसे हफ्ते पहले खोजा है, बस पोस्ट को अपडेट करना भूल गया। अभी कर रहा हूँ। – icza

+0

यह भी आपके जवाब को स्वीकार करते हुए भले ही इसे हल किया गया हो। – icza

+0

धन्यवाद, खुशी है कि आप इसे ठीक करने में कामयाब रहे। –

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