2012-07-18 20 views
112

में http फ़ाइल कैशिंग को रोकने के लिए कैसे मैं एमएएमपी में एक पृष्ठ जावास्क्रिप्ट एप्लिकेशन विकसित कर रहा हूं। मेरी जावास्क्रिप्ट और एचटीएमएल टेम्पलेट फाइलें अनुरोधों के बीच कैश हो रही हैं।अपाचे httpd (एमएएमपी)

क्या एमएएमपी में इंगित करने का कोई आसान तरीका है कि मैं http फ़ाइल कैशिंग को रोकना चाहता हूं? संभवतः .htaccess फ़ाइल के साथ? मैक पर एमएएमपी के लिए वर्चुअल होस्ट को .htaccess कहां रखूं?

उत्तर

258

कोशिश की? कैशेड किए जाने से दोनों .htaccess, httpd.conf में और एक VirtualHost में काम करना चाहिए (आमतौर पर httpd-vhosts.conf में रखा है, तो आप इसे अपने httpd.conf से शामिल किया है)

<filesMatch "\.(html|htm|js|css)$"> 
    FileETag None 
    <ifModule mod_headers.c> 
    Header unset ETag 
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
    Header set Pragma "no-cache" 
    Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
    </ifModule> 
</filesMatch> 

100% रोकें फ़ाइलें

यह समान है कैसे Google विज्ञापन हेडर को कैश-कंट्रोल: निजी, एक्स-जीजीआईपी-ओके = ""> प्रॉक्सी और क्लाइंट द्वारा विज्ञापनों के कैशिंग को रोकने के लिए।

http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html

और वैकल्पिक रूप से टेम्पलेट फ़ाइलों आप उन लोगों के लिए .html के अलावा अन्य एक एक्सटेंशन का उपयोग कर रहे हैं यदि आप पुन: प्राप्त करने के लिए कर रहे हैं एक्सटेंशन जोड़ें।

+2

धन्यवाद, यह एक .htaccess फ़ाइल में बहुत अच्छी तरह से काम करता है। जब मैं हेडर का निरीक्षण करता हूं तो मैं कैश नियंत्रण विकल्पों को देख सकता हूं और मेरी फाइलें अनुरोध के बीच 304 के बजाय http 200 के साथ दिखाई दे रही हैं, बस मुझे जो चाहिए था। – dmck

+2

LoadModule कमांड को जोड़ने के लिए मत भूलना। 'LoadModule headers_module lib/मॉड्यूल/mod_headers.so' – Spen

+1

यह अपाचे/2.4.12 (उबंटू) – Sarath

5

उदाहरण यहां के आधार पर: http://drupal.org/node/550488

निम्नलिखित शायद .htaccess

<IfModule mod_expires.c> 
    # Enable expirations. 
    ExpiresActive On 

    # Cache all files for 2 weeks after access (A). 
    ExpiresDefault A1209600 

    <FilesMatch (\.js|\.html)$> 
    ExpiresActive Off 
    </FilesMatch> 
</IfModule> 
+0

दुर्भाग्य से यह तब काम नहीं करता जब मैं अपनी प्रोजेक्ट निर्देशिका में .htaccess फ़ाइल डालता हूं। मुझे यकीन नहीं है कि mod_expires सक्रिय है या नहीं। – dmck

+4

@dmck: '' और '' अनुभाग हटाएं .. यदि mod_expires सक्षम नहीं है, तो आपको उन निर्देशों की बजाय एक त्रुटि मिल जाएगी जो चुपचाप अनदेखा की जा रही हैं। – Stennie

+0

किसी प्रोजेक्ट निर्देशिका में कोई मामूली वाक्यविन्यास त्रुटि यहां 500 त्रुटि का कारण बन सकती है। – SDsolar

2

में काम करेंगे mod_expires के बिना यह आपकी फ़ाइलों पर समाप्ति हेडर स्थापित करने के लिए कठिन होगा। कुछ भी उत्पन्न के लिए आप निश्चित रूप से, इस सवाल का जवाब पर कुछ डिफ़ॉल्ट हेडर सेट कर सकते हैं उस तरह mod_expires का काम कर रहे हैं:

अब इस जीत:

<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); ?> 

(Stack Overflow answer from @brianegge, जहां mod_expires समाधान भी समझाया गया है से लिया गया) स्थिर फ़ाइलों के लिए काम नहीं करते हैं, जैसे आपकी जावास्क्रिप्ट फाइलें। स्थिर फ़ाइलों के लिए ब्राउज़र और स्रोत फ़ाइल के बीच केवल अपाचे (बिना किसी समाप्ति मॉड्यूल के) है।

<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546"> 

इस हैं: जावास्क्रिप्ट फ़ाइलें, जो आपके ब्राउज़र पर किया जाता है की कैशिंग रोकने के लिए, यदि आप ऐसा यूआरएल की तरह लग रहा js url के अंत, ?rd=45642111 की तरह कुछ पर एक यादृच्छिक टोकन उपयोग कर सकते हैं, पृष्ठ पर यूआरएल एक PHP फ़ाइल द्वारा उत्पन्न होता है जिसे आप आसानी से PHP के साथ यादृच्छिक भाग जोड़ सकते हैं। यादृच्छिक क्वेरी स्ट्रिंग पैरामीटर को बस जोड़कर यूआरएल को यादृच्छिक करने का यह तरीका उदाहरण के लिए AJAX jQuery अनुरोध की मूल चीज़ अपॉन कै-कैश सेटिंग है। ब्राउजर कभी भी 2 यूआरएल पर विचार नहीं करेगा, जिसमें अलग-अलग क्वेरी स्ट्रिंग समान होंगी, और कभी भी कैश किए गए संस्करण का उपयोग नहीं करेंगे।

संपादित

ध्यान दें कि आप एएलओ mod_headers का परीक्षण करना चाहिए। यदि आपके पास mod_headers हैं तो आप शायद शीर्षलेख कीवर्ड के साथ एक्सपियर हेडर सेट कर सकते हैं।

+0

धन्यवाद, दुर्भाग्य से मैं किसी भी PHP फाइल का उपयोग नहीं कर रहा हूँ। मैं mod_headers में देख और mod_expires स्थापित करूँगा। – dmck

3

मैं एक ही मुद्दा था, लेकिन मैं यहाँ एक अच्छा समाधान पाया: Stop caching for PHP 5.5.3 in MAMP

मूल रूप से php.ini फ़ाइल खोजने के लिए और बाहर टिप्पणी OPCache लाइनों। मुझे आशा है कि यह वैकल्पिक उत्तर दूसरों को भी मदद करेगा।

+2

को आज़मा सकते हैं जो कि सर्वर की तरफ PHP कैशिंग के बारे में है, a.k.a OPCache। प्रश्न HTTP पर अनुरोध किए गए ब्राउज़र द्वारा कैश किए जा रहे फ़ाइलों के बारे में है। – Flion

-1

FWIW मुझे परिवर्तन प्रभावी होने से पहले php-fpm को पुनरारंभ करना पड़ा। अपाचे को पुनरारंभ करना अपर्याप्त था। इस पर थोड़ी देर के लिए मेरे बालों को बाहर खींच लिया।

+0

क्या परिवर्तन? शायद यह किसी अन्य उत्तर पर एक टिप्पणी होनी चाहिए। – isherwood

+0

मेरी माफ़ी, आप 100% सही हैं। मेरा मानना ​​है कि यह इसके ऊपर के उत्तर से संबंधित था (@acarito से), लेकिन इस बिंदु पर मैं ईमानदारी से यकीन नहीं कर रहा हूँ। यदि आप इसे आज़माकर पुष्टि करते हैं कि यह वास्तव में उससे संबंधित है, तो मुझे इसे हटाने और वहां एक टिप्पणी के रूप में जोड़ने में खुशी होगी। इस बीच, मुझे लगता है कि अगर यह एक अलग उत्तर से संबंधित है और किसी में से किसी के साथ संघर्ष करने में मदद करने के लिए इसे समाप्त करना उचित है। – Danny