23

स्थिति: क्रोम और सफारी में, एक URL पर जाकर (नहीं रीलोड बस में कर्सर डाल: मेरी स्थैतिक सामग्री के default_expiration सेट के साथ एक Google अनुप्रयोग इंजन साइट चला "14D"मैं वेबकिट में Google App Engine कैशिंग व्यवहार का नियंत्रण कैसे प्राप्त कर सकता हूं (etags पागल हो गया)?

समस्या को पता बार और एंटर मारना), अनुरोधों के टन को इफ-नो-मैच हेडर के साथ निकाल दिया जाता है। प्रतिक्रियाओं की अपेक्षा हमेशा 304 संशोधित नहीं होती है। मैं चार्ल्स या फिडलर जैसे डिबगिंग प्रॉक्सी में इन अनुरोधों को निकाल सकता हूं।

हैं: इन अनुरोधों और पूरी तरह से स्थिर सामग्री के लिए 304 प्रतिक्रियाओं से बचने के लिए - बस ब्राउज़र की कैश की गई सामग्री पर भरोसा जब यह उपलब्ध है।

हम वास्तव में लंबे समय तक मानक "कैश स्थैतिक सामग्री का उपयोग करते हैं, हम कैश" सिस्टम को बस्ट करने की आवश्यकता होने पर हमारे क्वेरी स्ट्रिंग में संस्करण = {संस्करण} संशोधनों को जोड़ने का ख्याल रखेंगे, इसलिए हम चाहते हैं वास्तव में 304 से बचने के लिए पसंद है।

विश्वास: मुझे लगता है कि यह एटैग हेडर के कारण होता है कि ऐप इंजन प्रत्येक स्थैतिक सामग्री प्रतिक्रिया के साथ भेजता है। ऐप इंजन एसडीके इस हेडर को नीचे भेजता है, और एसडीके के साथ गड़बड़ करते समय मुझे यह 304 व्यवहार दिखाई नहीं देता है।

कोई सलाह? क्या आप ऐप इंजन की स्थिर सामग्री के लिए etags बंद कर सकते हैं?

स्थैतिक सामग्री का एक उदाहरण टुकड़े के साथ अपडेट किया गया:http://www.khanacademy.org/stylesheets/shared-package/compressed.css

+1

क्या आप स्थिर सामग्री के लिए एक यूआरएल पोस्ट कर सकते हैं? फिर कोई समीक्षा कर सकता है कि आप किस हेडर के साथ लौट रहे हैं (आदि समाप्त हो जाता है)। –

+0

अच्छा विचार, अद्यतन प्रश्न – kamens

+0

अच्छा। मैं शीर्षकों पर कोई विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि जवाब वहां है। मैं शुक्रवार 24 दिसंबर को समाप्त करता हूं, यह अच्छा लग रहा है। मैं एक एटाग हेडर, एक कैश-कंट्रोल और एक उम्र भी देखता हूं, जो प्रभावित हो सकता है कि ब्राउज़र सामग्री को कैश करेगा या नहीं। –

उत्तर

8

हालांकि मुझे विश्वास नहीं है कि जीएई के लिए एटैग हेडर व्यवहार को नियंत्रित करने का कोई तरीका है, यह वेबकिट में एक बग के कारण होता है जो पोस्ट के बाद 302 रीडायरेक्ट प्राप्त करते समय सभी स्थिर सामग्री को पुनः डाउनलोड करने का कारण बनता है अनुरोध

एक बार वेबकिट इस बग ठीक करता है, इस मुद्दे को दूर जाना चाहिए।

यदि आप चाहिए, आप अस्थायी रूप से एक ताज़ा शीर्षक के माध्यम से पुनः निर्देशित बजाय एक 302 रीडायरेक्ट का उपयोग करके इस विशिष्ट रीडायरेक्ट के बाद पोस्ट बग के आसपास काम कर सकते हैं।

https://bugs.webkit.org/show_bug.cgi?id=38690

WebKit image reload on Post/Redirect/Get

http://www.google.com/support/forum/p/Chrome/thread?tid=72bf3773f7e66d68&hl=en

3

क्रोम 9.0, विंडोज। अपना होम पेज लोड करते समय, डिफ़ॉल्ट.css, साथ ही साथ अन्य सभी .css फ़ाइलों को बिना अनुरोध किए कैश से परोसा जाता है। मुझे लगता है कि यह ब्राउज़र-विशिष्ट व्यवहार है, आपको अन्य ब्राउज़रों को भी जांचना होगा।

इसके अलावा, इस गूगल निर्देशों की जांच, वे मुझे एक बहुत मदद की जब ट्यूनिंग कैशिंग पैरामीटर: http://code.google.com/speed/page-speed/docs/caching.html

+1

यह मैक के लिए विशेष हो सकता है, लेकिन मुझे निश्चित रूप से यह क्रोम और सफारी दोनों में दिखाई देता है। चूंकि अधिकांश छात्र स्कूल में मैक का उपयोग करते हैं, यह अभी भी हल करने में एक समस्या है। – kamens

3

इस के बाद से क्रोम और सफारी के साथ कोई समस्या है, तो आप HTML5 App Cache इस्तेमाल कर सकते हैं निश्चित संसाधनों पर सर्वर कॉल पूरी तरह से रोकने के लिए। उदाहरण here देखें।

+0

सच है। मुझे लगता है कि उन शीर्षकों से छुटकारा पाने के लिए मुझे थोड़ा और काम करना चाहिए, लेकिन अगर हम यह तय करते हैं कि हम इस समस्या को ठीक करने के लिए * आखिरी मिनट का कामकाज कर सकते हैं। – kamens

2

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

आप इसे मैक पर बहुत आसानी से आजमा सकते हैं। netcat कुछ बंदरगाह पर (NC) के साथ एक सरल सर्वर चलाने के लिए, मान लीजिए कि 9090 करते हैं:

nc -l 9090 

उस में http://localhost:9090 के लिंक के साथ एक सरल बनाएँ पृष्ठ पर, उस पर क्लिक करें, और हेडर अपने nc आदेश प्रदर्शित करता है देखते हैं।

मैन्युअल रूप से इसे एनसी में टाइप करके प्रतिक्रिया दें, उदा।

HTTP/1.0 200 OK 
ETag: "xyz" 
Content-type: text/plain 

Some text. 

फिर से लिंक पर क्लिक करें और अनुरोध में if-None-match शीर्षलेख देखें।पता बार में पते के बाद वापसी करें, और आप देखेंगे कि सफारी हेडर नहीं भेजता है।

+0

अच्छी सलाह। मेरी समस्या यह है कि पता बार में एंटर करना वास्तव में वास्तविक समस्या नहीं है (ऐसा न करने के लिए खेद है), लेकिन यह समस्या को पुन: उत्पन्न करने का सबसे आसान तरीका है। असली समस्या यह है कि हम एक ही प्रपत्र देखते हैं, "पृष्ठ ए" पर एक फॉर्म सबमिट करते समय और पोस्ट के बाद उसी "पृष्ठ ए" पर रीडायरेक्ट करते हुए। हम इनमें से बहुत से फॉर्म पोस्ट सबमिशन करते हैं, और प्रत्येक रीडायरेक्ट के बाद "पेज ए" पर सभी स्थिर सामग्री के लिए अतिरिक्त अनुरोध अवांछित हैं। – kamens

+1

मैं देखता हूं। तब आपकी मदद नहीं कर सकता, मुझे GAE कॉन्फ़िगरेशन विकल्पों के बारे में पता नहीं है। –

5

आप दोनों Last-Modified और ETag हेडर को दूर करने की जरूरत है।

ETag शीर्षलेख निकालकर, आप फ़ाइलों को मान्य करने के लिए सक्षम किया जा रहा से कैश और ब्राउज़रों को निष्क्रिय है, ताकि वे अपने कैश-नियंत्रण पर भरोसा करते हैं और हैडर समय-सीमा समाप्त करने के लिए मजबूर कर रहे हैं। इकाई टैग (ईटीएजी) एक कैश की गई फ़ाइल के नए संस्करण की जांच करने के लिए एक तंत्र है।

अंतिम-संशोधित और ईटीएजी हेडर दोनों को हटाकर, आप पूरी तरह से अगर-संशोधित-से-अगर और कोई नहीं-मिलान अनुरोध और उनके 304 संशोधित प्रतिक्रियाओं को समाप्त नहीं करेंगे, तो एक फ़ाइल समाप्त होने तक अपडेट की जांच किए बिना कैश रह जाएगी हेडर इंगित करता है कि नई सामग्री उपलब्ध है।

अधिक यहाँ जानकारी: http://www.samaxes.com/2008/04/htaccess-gzip-and-cache-your-site-for-faster-loading-and-bandwidth-saving/

दुर्भाग्य से मैं नहीं जानता कि आप उन्हें कैसे GAE के स्थैतिक सामग्री के लिए बंद कर सकते हैं।

+1

हाँ, सहमत ... मुझे जीएई भूमि में अधिक नियंत्रण की आवश्यकता है। यह अपेक्षाकृत बड़े पैमाने पर बग की तरह लगता है। – kamens

3

आपका ईटाग मूल्य ठीक है। इटाग पुनर्मूल्यांकन को मजबूर नहीं करता है। यह सिर्फ अंतिम संशोधन तिथि के बाद इसे अधिक विश्वसनीय होने में सक्षम बनाता है। मैंने क्रोम 9 का उपयोग करके बस अपने स्थिर सामग्री उदाहरण पर ब्राउज़ किया है, और आपकी सामग्री को कैश किया गया है और अनावश्यक रूप से पुन: सत्यापित नहीं किया गया है। आपके द्वारा देखी गई समस्या ब्राउज़र सेटिंग्स को हमेशा "पुनः सत्यापित" करने से संबंधित हो सकती है, जो अधिकांश ब्राउज़रों के लिए डिफ़ॉल्ट नहीं है। यह एक मैक वेबकिट संबंधित बग भी हो सकता है।

+1

हां, यह केवल मैक वेबकिट पर हो रहा है, लेकिन एटैग कुछ ब्राउज़रों में पुनर्मूल्यांकन को मजबूर कर रहा है और वह ट्रिगर है जिसे मुझे हटाने की आवश्यकता है। – kamens