2012-11-25 24 views
7

एक साधारण एचटीएमएल कोड:क्रोम को रीडायरेक्ट कैश करने के लिए कैसे मजबूर करें?

Cache-Control: no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: 0 
Location: http://someaddr/random_image_12345.jpg 

समस्या:

<img src="http://someaddr/image.php"> 

image.php एक स्क्रिप्ट है कि सभी आवश्यक नहीं-कैश हेडर के साथ एक स्थिर छवि के लिए एक यादृच्छिक पुनर्निर्देशन देता है जब वापस नेविगेट और इस HTML पृष्ठ पर अग्रेषित करें, क्रोम (नवीनतम जीत/मैक) पता http://someaddr/image.php को पुन: सत्यापित नहीं करता है।

मैंने रीडायरेक्ट 302 और 303 (जो आरएफसी में मजबूत आवश्यकता है, इसे ब्राउज़र द्वारा कैश नहीं किया जाना चाहिए) का उपयोग करने का प्रयास किया है। यह आईई, फ़ायरफ़ॉक्स, ओपेरा में एक आकर्षण की तरह काम करता है। वे हमेशा http://someaddr/image.php रीफ्रेश करते हैं। लेकिन क्रोम नहीं करता है।

मैंने क्रोम में डेवलपर टूल्स का भी उपयोग किया है, और ऐसा लगता है कि नेटवर्क लॉग में यह http://someaddr/image.php लाने के किसी भी प्रयास (कैश या नहीं) को भी नहीं दिखाता है। नेटवर्क लॉग केवल http://someaddr/random_image_12345.jpg (कैश) से पहले ही एक कनेक्शन दिखाता है।

<img src="http://someaddr/image.php?refresh={any random number or timestamp}"> 

लेकिन मुझे पसंद नहीं है/इस तरह हैक्स उपयोग नहीं कर सकते: क्यों यह इतना टूट गया है ...

मैं छवि स्रोत में क्वेरी स्ट्रिंग डालने की भोली/सरल समाधान पता है। क्या कोई अन्य विकल्प भी हैं?

+0

क्या आपने 'समाप्ति: -1' के साथ प्रयास किया है? Pragma –

+0

पर 'नो-स्टोर' भी जोड़ें: -1, क्रोम पर कोई प्रभाव नहीं। – thedk

+0

मैंने क्रोम की जांच भी की है। मैंने पृष्ठ पर एक जावास्क्रिप्ट बनाया है, जो पृष्ठ सामग्री में गतिशील रूप से सम्मिलित करता है। यहां तक ​​कि इस मामले में क्रोम मूल स्रोत यूआरएल से जुड़ने से इंकार कर देता है। – thedk

उत्तर

-3
एक link एक और सवाल में तैनात से

:

The first header Cache-Control: must-revalidate means that browser must send validation request every time even if there is already cache entry exists for this object. 
Browser receives the content and stores it in the cache along with the last modified value. 
Next time browser will send additional header: 
If-Modified-Since: 15 Sep 2008 17:43:00 GMT 

This header means that browser has cache entry that was last changed 17:43. 
Then server will compare the time with last modified time of actual content and if it was changed server will send the whole updated object along with new Last-Modified value. 

If there were no changes since the previous request then there will be short empty-body answer: 
HTTP/1.x 304 Not Modified 

आप HTTP के etags और अंतिम बदलाव दिनांक का उपयोग सुनिश्चित करें कि आप ब्राउज़र डेटा यह पहले से ही कैश है नहीं भेज रहे हैं कर सकते हैं।

$last_modified_time = filemtime($file); 
$etag = md5_file($file); 

header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); 
header("Etag: $etag"); 

if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time || 
    trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) { 
    header("HTTP/1.1 304 Not Modified"); 
    exit; 
} 
+0

यह उत्तर समस्या से प्रासंगिक नहीं है। समस्या यह है कि क्रोम सर्वर से कनेक्ट करने का भी प्रयास नहीं करता है। यह सर्वर कैशिंग की समस्या नहीं है और 304 लौट रहा है। – thedk

+0

हम्म ... मेरा बुरा, ऐसा लगता है कि आपने यह स्पष्ट किया जब आपने कहा कि यह अन्य ब्राउज़रों के साथ काम करता है। – awm

+0

लेकिन आप उल्लेख करते हैं कि एक यादृच्छिक संख्या काम जोड़ना; जिसका अर्थ है क्रोम सर्वर से अनुरोध भेज रहा है। आप उसे कैसे समझायेंगे? – awm

4

प्रयास करें एक 307 अनुप्रेषित

लेकिन अगर आप एक कड़ी है कि एक कैश्ड रीडायरेक्ट के कारण काम नहीं करेगा करने के लिए प्राप्त करने की कोशिश अटक कर रहे हैं ...

यह नहीं करता है कैश को साफ़ न करें, लेकिन यदि आप कैश किए गए रीडायरेक्ट किए गए लिंक पर पहुंचने की कोशिश कर रहे हैं तो यह आपके बालों को खींच कर अपने आस-पास एक त्वरित और संभावित मार्ग है।

पता बार में लिंक पता कॉपी करें और पते पर कुछ जीईटी जानकारी जोड़ें।

उदाहरण यदि आपकी साइट http://example.com

Put a ?x=y at the end of it 
(example.com?x=y) - the x and y could be anything you want. 

है यदि पहले से ही है एक? यूआरएल में

(example.com?this=that&true=t) - try to add &x=y to the end of it... 

(example.com?this=that&true=t&x=y) 
+1

पृष्ठ के भीतर से, 'window.location' का उपयोग करके, उदाहरण के लिए, यादृच्छिक प्राप्त अनुरोध वह है जो मेरे लिए काम करता है। मैं एक GUID- जैसे यादृच्छिक स्ट्रिंग बनाता हूं और इसे प्राप्त करने के रूप में जोड़ता हूं। और एक्स आपको वास्तव में ज़रूरत है, यानी, example example? X', जहां x एक यादृच्छिक कुंजी मान है। – ps2goat

+0

यह भी ध्यान दें: अपनी सर्वर स्क्रिप्ट का उपयोग करने के लिए कुछ भी उपयोग न करने का प्रयास करें, अन्यथा आपको विरोधाभासी परिणाम मिल सकते हैं ... सुरक्षित होने के लिए आप केवल गैबल का एक गुच्छा टाइप कर सकते हैं (example.com?kjsdjksdjhkds) – JxAxMxIxN

संबंधित मुद्दे