2012-01-24 9 views
6

मैं WCF Web API के साथ एक सरल बाकी सेवा को लागू करने कर रहा हूँ और कैश प्रतिक्रियाओं के लिए HTTP हेडर सेट करने का प्रयास भर में असंगत लगता है।HTTPS संचय ब्राउज़रों

इस

http://localhost:49302/my/2 

प्रतिक्रिया हेडर इस तरह दिखेगा की तरह एक साधारण प्राप्त के लिए:

Server: ASP.NET Development Server/10.0.0.0 
Date: Tue, 24 Jan 2012 18:18:44 GMT 
X-AspNet-Version: 4.0.30319 
Content-Length: 233 
Cache-Control: max-age=120 
Vary: Accept 
Expires: Tue, 24 Jan 2012 18:20:44 GMT 
Last-Modified: Tue, 24 Jan 2012 18:18:15 GMT 
Content-Type: application/xml; charset=utf-8 

आशय है कि ग्राहक दो मिनट के लिए संसाधन कैश चाहिए।

हालांकि, WCF वेब एपीआई टेस्ट क्लाइंट का उपयोग कर, व्यवहार विभिन्न ब्राउज़रों में असंगत है:

  • Firefox में (9.0.1) अनुरोध कैश किया गया है, और पहले दो मिनट के बाद का एक नया संस्करण है संसाधन प्रदर्शित यह व्यवहार अपेक्षित है।
  • क्रोम (16.0.912.77 मी) कैश हेडर बिल्कुल सम्मान नहीं कर रहे हैं। हर जीईटी अनुरोध के लिए संसाधन का एक नया संस्करण लाया जा रहा है। इस व्यवहार की उम्मीद नहीं है (मेरे द्वारा, कम से कम)।
  • इंटरनेट एक्सप्लोरर (9) में व्यवहार क्रोम जैसा ही है।

क्रोम और आईई कैश हेडर का सम्मान क्यों नहीं करते?

यह WCF वेब एपीआई टेस्ट क्लाइंट में एक बग है?

+1

WCF वेब एपीआई टेस्ट ग्राहक बहुत नया है, तो यह एक बग हो सकता है। क्या आप सीधे ब्राउज़र के साथ परीक्षण कर सकते हैं या एक छोटा परीक्षण पृष्ठ लिख सकते हैं। – suing

उत्तर

4

कैशिंग सही पाने के लिए कठिन है। तथ्य यह है कि एक ब्राउज़र कैश निर्देशों को अनदेखा कर सकता है निश्चित रूप से मदद नहीं करता है। अगर मैं एक 15 सेकंड कैश अवधि के साथ यह परीक्षण और मैं बस MaxAge और MustRevalidate ऐसा लगता है सेट

this document आईई के अनुसार एक भिन्न कुछ भी युक्त हैडर लेकिन Accept-Encoding और उपयोगकर्ता-एजेंट

के साथ किसी भी अनुरोध कैश्ड कभी नहीं IE9, फ़ायरफ़ॉक्स और क्रोम के साथ ठीक काम करने के लिए।

वेब एपीआई HttpResponseMessage:

result = new HttpResponseMessage<Book>(book); 
result.Headers.CacheControl = new CacheControlHeaderValue(); 
result.Headers.CacheControl.MaxAge = TimeSpan.FromSeconds(15); 
result.Headers.CacheControl.MustRevalidate = true; 
return result; 

प्रतिक्रिया हेडर:

HTTP/1.1 200 OK 
Server: ASP.NET Development Server/10.0.0.0 
Date: Wed, 25 Jan 2012 09:13:32 GMT 
X-AspNet-Version: 4.0.30319 
Content-Length: 98 
Cache-Control: must-revalidate, max-age=15 
Content-Type: application/json; charset=utf-8 
Connection: Close 

मुझे यकीन है कि MustRevalidate वास्तव में आवश्यक है नहीं कर रहा हूँ, लेकिन यह इसका इस्तेमाल करने की सिफारिश की है। चश्मा here देखें।

+0

कैश निर्देशों को अनदेखा करने वाले ब्राउज़र के बारे में यह एक बहुत ही रोचक अंतर्दृष्टि है। हालांकि, यहां तक ​​कि मैंने अपने शीर्षकों को यहां पोस्ट किए गए लोगों के बहुत करीब होने के लिए छंटनी की है, फिर भी मैं प्रतिक्रिया को कैशिंग या आईई 9 को कैशिंग नहीं देख रहा हूं। –

+0

कैश निर्देशों को बदलता है केवल एक संकेत है और ब्राउजर इसे अनदेखा करने के लिए काफी स्वतंत्र है।अनिवार्य रूप से उपयोग करना ब्राउज़र के लिए एक संकेत है जो कठोर होने के लिए, सुनिश्चित नहीं है कि अलग क्या है। मैं लोकलहोस्ट पर परीक्षण कर रहा था और परीक्षण क्लाइंट का उपयोग नहीं कर रहा था, लेकिन एक jQuery $ .getJSON() कॉल के साथ एक नियमित HTML पृष्ठ पर एक बटन का उपयोग किया। – Maurice

2

टेस्ट "वास्तविक डोमेन" इतनी WCF टेस्ट ग्राहक या क्रोम/आईई does not को स्थानीय होस्ट के लिए कोई विशेष चाल के साथ स्थानीय होस्ट को बदलने के लिए।

+0

यह वास्तव में एक बहुत ही उचित सुझाव था, क्योंकि मैंने इसके बारे में सोचा नहीं था, लेकिन इससे कोई फर्क नहीं पड़ता। मैं अभी भी अपने स्थानीय बॉक्स पर चल रहा हूं, लेकिन मैंने अपने स्थानीय मशीन नाम (नेटबीओएसओएस) के साथ-साथ 'पूरी तरह से योग्य' DNS-like नाम दोनों के साथ प्रयास किया है। –