2012-01-20 11 views
17

क्या कोई HTML फ़ाइल पुनः लोड करने के लिए क्लाइंट के कैश को मजबूर करने का कोई तरीका है यदि आप उस फ़ाइल को यूआरआई संदर्भित नहीं कर सकते हैं (उदाहरण के लिए, टाइमस्टैम्प परम नहीं जोड़ सकता है)?तैनाती के बाद फोर्स कैश रीफ्रेश करें

  • करने के लिए एक 1000 उपयोगकर्ता
  • प्लगइन है कि भार example.com/page.html जो script.js
  • संसाधन यूआरआई example.com/page.html
  • पर कॉल तैनात एक प्लगइन बदला नहीं जा सकता (/ प्लगइन अद्यतन ओ डब्ल्यू)
  • :

    यहाँ मेरी स्थिति है

  • page.html बदल दिया गया है। मुझे उपयोगकर्ताओं के कैश से पुराने page.html को साफ़ करने की आवश्यकता है ताकि नया page.html लोड हो सके।

कोई विचार? Htaccess? PHP API जो पुराना & नया page.html कॉल करता है?

धन्यवाद!

उत्तर

29

ठीक है, यदि पृष्ठ पहले से ही ब्राउज़र द्वारा कैश किया गया है, तो इसे अपने कैश किए गए संस्करण का उपयोग न करने के लिए यह कहना मुश्किल है क्योंकि यह निर्धारित करने से पहले इसे फिर से जांचने के लिए परेशान नहीं होगा कि यह कैश किए गए संस्करण को पुराना है। आपको अपने सभी उपयोगकर्ताओं को ctrl + f5 दबाए जाने के लिए उन्हें एक स्नैल-मेल पत्र भेजना होगा :)

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

ब्राउज़र HTTP मानक शीर्षलेख का उपयोग कर अपने वेब सर्वर से अपनी सामग्री पर बातचीत करते हैं। आगे बढ़ना यदि आप किसी ब्राउज़र को फ़ाइल को कैश नहीं करना चाहते हैं, तो आपको उचित HTTP शीर्षलेख भेजना होगा।

header('Cache-Control: no-cache'); 
header('Pragma: no-cache'); 

आप अपने पृष्ठ हेडर में निम्न कर सकते हैं यह एचटीएमएल के माध्यम से किया जा सकता है, तो:: यदि आप PHP में ऐसा करना चाहते हैं, तो आप ब्राउज़र के लिए उपयुक्त HTTP हेडर भेजने के लिए header समारोह का उपयोग कर सकते

<meta http-equiv="Expires" content="Tue, 01 Jan 1995 12:12:12 GMT"> 
<meta http-equiv="Pragma" content="no-cache"> 

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


अद्यतन

HTTP/1.1 विनिर्देश से Response Cacheability पर:

यदि वहाँ न तो कोई संचय सत्यापनकर्ता है और न ही कोई स्पष्ट सीमा समाप्ति समय एक प्रतिक्रिया के साथ जुड़े, हम नहीं उम्मीद है कि इसे कैश किया जाए, लेकिन कुछ कैश इस उम्मीद का उल्लंघन कर सकते हैं (उदाहरण के लिए, जब या कोई नेटवर्क कनेक्टिविटी उपलब्ध नहीं है)।

+0

यह सुनिश्चित नहीं है कि यह मेरा लक्ष्य पूरा करता है या नहीं। जिस PHP फ़ाइल पर मेरा नियंत्रण है, वह एक example है जिसे 'example.html' से जेएस फ़ाइल द्वारा बुलाया जाता है। आपके द्वारा प्रदान किया गया 'हेडर' समाधान ऐसा लगता है कि यह केवल php फ़ाइल के लिए ही काम करेगा? या यह एक ही डोमेन पर सभी संसाधनों के लिए काम करेगा? एचटीएमएल समाधान के लिए, यह काम करता है अगर पुराने 'example.html' फ़ाइल में पहले से ही उन टैग शामिल हैं, लेकिन ऊपर वर्णित अनुसार, यह मेरी स्थिति का मामला नहीं है। – Kyle

+0

अन्यथा कहा, मैं एक पुराने 'example.html' को पुराना' example.html' लोड करने का प्रयास कर रहा हूं जो पहले से ही कैश किया गया है। – Kyle

+0

अफसोस की बात है, एक बार ब्राउज़र ने कुछ कैश किया है, तो आप इसके बारे में बहुत कुछ नहीं कर सकते हैं। अच्छी बात यह है कि अधिकांश ब्राउज़र लंबे समय तक सामान कैश नहीं करते हैं। बस जीवन के तथ्यों, मुझे डर है। – rdlowrey

4

शायद PHP का उपयोग जावास्क्रिप्ट कॉल में टाइमस्टैंप जोड़ने के लिए किया जा सकता है। इसके बाद आप इसे अवधि के लिए चला सकते हैं ...........उदाहरण के लिए:

check_if_cache_should_be_disabled.php

<?php 
$deployment_flag = true; // Uncomment this if you want to disable normal cache. 
//$deployment_flag = false // Uncomment this if you want to enable normal cache. 
?> 

page.php

<script src="/js/script.js<?php 
require('check_if_cache_should_be_disabled.php'); 
// File Get Contents can be used for a remote server 
//file_get_contents('http://yourserver.com/check_if_cache_should_be_disabled.php'); 
if ($deployment_flag == true) { 
print ('?ts='.date()); 
} 
?>"></script> 
0

आप उदाहरण page_v2.html के लिए फ़ाइल नाम बदल सकते हैं,जो borwser पृष्ठ को एक नए पृष्ठ के रूप में लोड करेगा।