मैं http कैशिंग का उपयोग करने की कोशिश कर रहा हूं। अपने नियंत्रक में मैं एक प्रतिक्रिया इस प्रकार सेट कर रहा हूं:
$response->setPublic();
$response->setMaxAge(120);
$response->setSharedMaxAge(120);
$response->setLastModified($lastModifiedAt);
देव विधा
देव माहौल में पहली प्रतिक्रिया 200 हेडर के साथ होती है:
cache-control:max-age=120, public, s-maxage=120
last-modified:Wed, 29 Feb 2012 19:00:00 GMT
अगले 2 मिनट के लिए हर प्रतिक्रिया के बाद हेडर के साथ एक 304 है:
cache-control:max-age=120, public, s-maxage=120
यह मूल रूप से है जो मैं यह होने की उम्मीद करता हूं।
ठेस मोड
ठेस मोड प्रतिक्रिया में हेडर अलग हैं। ध्यान दें कि app.php में मैं AppCache में कर्नेल लपेटता हूं।
पहली प्रतिक्रिया 200 हेडर के साथ है:
cache-control:must-revalidate, no-cache, private
last-modified:Thu, 01 Mar 2012 11:17:35 GMT
तो यह एक निजी नो-कैश प्रतिक्रिया है।
हर अगले अनुरोध बहुत ज्यादा है जो मैं यह होने की उम्मीद करूँगा; निम्नलिखित हेडर के साथ एक 304:
cache-control:max-age=120, public, s-maxage=120
क्या मुझे इसकी चिंता करनी चाहिए? क्या यह एक अपेक्षित व्यवहार है?
अगर मैं वार्निश या अकामाई सर्वर को इसके सामने रखूं तो क्या होगा?
मैंने थोड़ी सी डिबगिंग की और मुझे लगा कि अंतिम-संशोधित हेडर के कारण प्रतिक्रिया निजी है। HttpCache कर्नेल कैश्ड प्रतिक्रिया ( HttpCache :: हैंडल) () विधि को अद्यतन करने के लिए EsiResponseCacheStrategy का उपयोग करता है ।
if (HttpKernelInterface::MASTER_REQUEST === $type) {
$this->esiCacheStrategy->update($response);
}
EsiResponseCacheStrategy गैर संचित करने योग्य में एक प्रतिक्रिया बदल जाता है , तो इसे इस्तेमाल करता है या तो अंतिम-प्रतिक्रिया या ETag ( EsiResponseCacheStrategy :: ऐड () विधि):
if ($response->isValidateable()) {
$this->cacheable = false;
} else {
// ...
}
यदि अंतिम-प्रतिक्रिया या ETag हेडर मौजूद है तो प्रतिक्रिया :: isValidateable () सही है।
यह कैश-कंट्रोल हेडर ( EsiResponseCacheStrategy :: update () मेथड) को ओवरराइट करने का परिणाम है :
if (!$this->cacheable) {
$response->headers->set('Cache-Control', 'no-cache, must-revalidate');
return;
}
मैंने Symfony2 उपयोगकर्ता समूह पर यह प्रश्न पूछा था, लेकिन मुझे अब तक कोई उत्तर नहीं मिला: https://groups.google.com/d/topic/symfony2/6lpln11POq8/discussion
अपडेट करें।
चूंकि अब मेरे पास मूल कोड तक पहुंच नहीं है इसलिए मैंने नवीनतम सिम्फनी मानक संस्करण के साथ परिदृश्य को पुन: पेश करने की कोशिश की ।
रिस्पॉन्स हेडर अब अधिक सुसंगत हैं, लेकिन अभी भी गलत प्रतीत होते हैं।
जैसे ही मैंने Last-Modified
प्रतिक्रिया पर एक हेडर सेट किया , ब्राउज़र द्वारा की गई पहली प्रतिक्रिया में एक:
Cache-Control:must-revalidate, no-cache, private
दूसरी प्रतिक्रिया की उम्मीद है:
Cache-Control:max-age=120, public, s-maxage=120
अगर मैं If-Modified-Since
हेडर भेजने से बचता हूं , तो हर अनुरोध वापस आ जाता है must-revalidate, no-cache, private
।
इससे कोई फर्क नहीं पड़ता कि अनुरोध अब prod
या dev
पर्यावरण में किया गया था ।
app.php
और app_dev.php
वही हैं? (डेब्यू और env की अनदेखी)
debug=>true
AppCache में getOptions () में सेट करेंगे ताकि आपको X-Symfony-Cache
हेडर मिले?