Apache httpd (MAMP) में http फ़ाइल कैशिंग को कैसे रोकें


139

मैं MAMP में एक सिंगल पेज जावास्क्रिप्ट एप्लिकेशन विकसित कर रहा हूं। मेरे जावास्क्रिप्ट और HTML टेम्पलेट फाइलें अनुरोधों के बीच कैश की जा रही हैं।

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

जवाबों:


318

इसकी कोशिश की? दोनों में काम करना चाहिए .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 विज्ञापन शीर्ष लेख कैश-कंट्रोल को कैसे नियोजित करते हैं: निजी, x-gzip-ok = ""> प्रॉक्सी और क्लाइंट द्वारा विज्ञापनों की कैशिंग को रोकने के लिए।

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

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


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

2
LoadModule कमांड जोड़ना न भूलें। LoadModule headers_module lib/modules/mod_headers.so
स्पैनहोएट सेप

क्या मैं उन हेडर को एक-एक करके एक्सटेंशन को परिभाषित करने के बजाय सभी फ़ाइल प्रकारों पर लागू कर सकता हूं?
थारिक नुगरोतोमो

1
@ThariqNugrohotomo हाँ यह संभव है! यह एक नियमित अभिव्यक्ति है, आप कोशिश कर सकते हैं <filesMatch "\.+">या<filesMatch ^>
चार्ली रुडेनस्टेल

मैं एक वेब सर्वर पर MAMP लेकिन अपाचे का उपयोग नहीं कर रहा हूँ। मुझे "sudo a2enmod हेडर" और "sudo a2enmod expires" लिखकर और फिर sudo सेवा apache2 पुनरारंभ करके अपने Apache इंस्टॉलेशन पर हेडर और एक्सपायर मॉड्यूल को सक्षम करना पड़ा। LoadModule और IfModule कमांड / टैग आवश्यक नहीं थे - बस ऊपर दिए गए IFModule टैग भागों को छोड़ दें, लेकिन फिर भी उनके बीच हैडर सेटिंग्स दर्ज करें। -
andruo11

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>

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

5
@dmck: <IfModule mod_expires.c>और </IfModule>सेक्शन को हटा दें .. यदि mod_expires सक्षम नहीं है, तो आपको उन निर्देशों के बजाय एक त्रुटि मिल जाएगी जिन्हें चुपचाप अनदेखा किया जा रहा है।
स्टेनी जूल

प्रोजेक्ट डायरेक्टरी में यहाँ कोई भी मामूली वाक्यविन्यास त्रुटि 500 ​​त्रुटि का कारण बन सकती है।
एसडीसोलर

3

मेरे पास एक ही मुद्दा था, लेकिन मुझे यहां एक अच्छा समाधान मिला: एमएनपी में PHP 5.5.3 के लिए कैशिंग बंद करो

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


3
यह सर्वर की ओर PHP कैशिंग, उर्फ ​​OPCache के बारे में है। सवाल उन फाइलों के बारे में है जो HTTP पर अनुरोधित ब्राउज़र द्वारा कैश्ड हैं।
17

2

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

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

(इससे लिया गया: @brianegge से ढेर अतिप्रवाह उत्तर , जहां mod_expires समाधान भी समझाया गया है)

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

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

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

संपादित करें

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


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

CSS फाइलों के कैशिंग को रोकने के बारे में क्या?
एरोन फ्रेंके

1
<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>

यह एक अच्छी गुणवत्ता का जवाब नहीं है। ओपी पर रिपोर्ट की गई समस्या को हल करने के लिए क्या कदम हैं, विस्तार से बताने का प्रयास करें।
9
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.