2009-06-25 27 views
19

मेरे पास एक ऐसी स्थिति है जहां मेरा (एम्बेडेड) वेब सर्वर एक्सपियर हेडर भेज रहा है, लेकिन ब्राउज़र हेडर सेटिंग का सम्मान नहीं करता है, यानी, यदि मैं पृष्ठ को रीफ्रेश करता हूं, ब्राउज़र उन संसाधनों का अनुरोध करता है जिन्हें कैश किया जाना चाहिए। निम्न हेडर कि आदान-प्रदान किया जा रहा है कर रहे हैं:HTTP हेडर का विस्तार करता है ब्राउज़र द्वारा सम्मानित नहीं?

 
https://192.168.1.180/scgi-bin/ajax/ajax.cgi 

GET /scgi-bin/ajax/ajax.cgi HTTP/1.1 
Host: 192.168.1.180 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Cache-Control: max-age=0 

HTTP/1.x 200 OK 
Date: Wed, 24 Jun 2009 20:26:47 GMT 
Server: Embedded HTTP Server. 
Connection: close 
Content-Type: text/html 
---------------------------------------------------------- 
https://192.168.1.180/scgi-bin/ajax/static.cgi?fn=images/logo.jpg&ts=20090624201057 

GET /scgi-bin/ajax/static.cgi?fn=images/logo.jpg&ts=20090624201057 HTTP/1.1 
Host: 192.168.1.180 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729) 
Accept: image/png,image/*;q=0.8,*/*;q=0.5 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Referer: https://192.168.1.180/scgi-bin/ajax/ajax.cgi 
Cache-Control: max-age=0 

HTTP/1.x 200 OK 
Date: Wed, 24 Jun 2009 20:26:47 GMT 
Server: Embedded HTTP Server. 
Connection: close 
Expires: Wed, 1 Jun 2011 20:00:00 GMT 
Content-Type: image/jpg 
---------------------------------------------------------- 

ajax.cgi (static.cgi स्क्रिप्ट के माध्यम से) एक लोगो ग्राफिक के साथ एक html पृष्ठ देता है, जो मैं कैश्ड चाहते हैं, लेकिन ब्राउज़र लिए पूछ रहा है प्रत्येक ताज़ा करने पर लोगो।

+0

मैं तुम्हें HTTPS पर काम कर रहे हैं देखें। क्या ऐसा कोई कारण नहीं है जब आप इसकी अपेक्षा करते हैं? क्या आप केवल HTTP संस्करण का प्रयास कर सकते हैं? – mark

उत्तर

13

आप अपने ब्राउज़र में क्या कर रहे हैं? मुझे लगता है कि आप रीलोड बटन पर क्लिक करें या यहां तक ​​कि कुछ बदलाव जैसे + रीलोड करें। आम तौर पर, ब्राउज़र Cache-Control: max-age=0 शीर्षलेख नहीं भेजेगा। इसका मतलब है कि ब्राउज़र ने कैश की गई छवि को फेंक दिया है और इसे फिर से प्राप्त करना चाहता है।

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

इसके अतिरिक्त, आप अपनी प्रतिक्रिया में Cache-control: public शीर्षलेख जोड़ सकते हैं। यह प्रॉक्सी और ब्राउजर को छवि को कैश करने के लिए स्पष्ट रूप से अनुमति देता है।

+1

यह सुनिश्चित सही लगता है। ब्राउज़र (फ़ायरफ़ॉक्स?) अधिकतम आयु = 0 भेज रहा है, जिसका अर्थ है कि यह 0 से अधिक पुरानी प्रतिक्रिया नहीं चाहता है, यानी, यह मूल वेब सर्वर को हिट करना चाहता है। यह "ताज़ा करें" की परिभाषा है। अपने पेज से दूर नेविगेट करें, फिर यूआरएल में पेस्ट करें और देखें कि क्या होता है। –

+0

दरअसल, मैं एक पेज रीलोड कर रहा था, और मैं ब्राउज़र को एचटीएमएल पुनः लोड करने की उम्मीद कर रहा था लेकिन सभी कैश संसाधन भी नहीं। मैंने सोचा था कि ब्राउज़र को सभी संसाधनों पर कैश को अमान्य करने के लिए बाध्य करने के लिए Shift-click (या नियंत्रण-क्लिक? याद नहीं किया जा सकता)। मुझे लगता है कि मेरी समझ गलत है? – user128602

+0

मुझे इसके बारे में निश्चित नहीं है। मुझे लगता है कि ब्राउज़र एफ 5/रीलोड बटन पर शिफ्ट के साथ/बिना अलग व्यवहार करते हैं। – chris166

0

सीजीआई स्क्रिप्ट ऐसा लगता है कि इसमें टाइमस्टैम्प पैरामीटर है ... यह बदल नहीं रहा है, है ना? ब्राउजर को कैश में एक अलग ऑब्जेक्ट के रूप में प्रत्येक अद्वितीय यूआरएल का इलाज करना चाहिए, इसलिए यदि यह हर अनुरोध के साथ अद्यतन हो रहा है, तो यह कैश की गई छवि से मेल नहीं खाएगा।

इसके अतिरिक्त, एक्सपियर फ़ील्ड बिल्कुल आरएफसी 1123 प्रारूप में नहीं है, क्योंकि आपको तिथि के लिए दो अंक की आवश्यकता है। यह कोई समस्या हो सकती है या नहीं भी हो सकती है, लेकिन यह जांचने के लिए कुछ है। ब्राउज़र में Cache-Control: max-age=0 शामिल है, जो इंगित करता है कि यह मानता है कि इसका कैश संभावित रूप से पुराना हो सकता है।

सर्वर को यह सत्यापन अनुरोध मिलने के बाद, यह 304 (Not Modified), या 200 (OK) लौटा सकता है, क्योंकि यह वर्तमान में कर रहा है।

+0

नहीं, टाइमस्टैम्प बदल नहीं रहा है। और समाप्ति दिनांक प्रारूप पर टिप के लिए धन्यवाद, मैं दोबारा जांच करूंगा। – user128602

16

यदि आप पृष्ठ को रीफ्रेश करते हैं तो ब्राउज़र एक्सपियर हेडर को अनदेखा करता है। यह हमेशा जांचता है कि वेब सर्वर से संपर्क करके कैश प्रविष्टि अभी भी मान्य है या नहीं। आदर्श रूप में, यह if-Modified-since अनुरोध शीर्षलेख का उपयोग करेगा ताकि कैश प्रविष्टि अभी भी वैध होने पर सर्वर '304 संशोधित नहीं' लौटा सके।

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

की स्थापना के लिए अंगूठे का कुछ नियम समय-सीमा समाप्त और Last-Modified इस ब्लॉग पोस्ट में वर्णित हैं:

http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/

+3

"यदि आप पेज रीफ्रेश करते हैं तो ब्राउज़र एक्सपियर हेडर को अनदेखा करता है।" धन्यवाद! मुझे यह नहीं मालूम था। –

+2

वह ब्राउज़र कौन सा करता है? – Pacerier

0

अपने https प्रमाण पत्र में किसी भी त्रुटि ब्राउज़र अपने हेडर का सम्मान नहीं करने के लिए कारण होगा।

https के बिना इसे आज़माएं और देखें कि यह सादे http पर काम करता है या नहीं।

इस जवाब https://stackoverflow.com/a/17716911

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