2009-03-13 11 views
81

मैं कुछ जो मैंने सोचा था कि काफी सरल हो जाएगा करने के लिए कोशिश कर रहा हूँ। आईआईएस 7 प्राप्त करने के लिए ग्राहकों को बताने के लिए वे एक निश्चित समय के लिए मेरी साइट पर सभी छवियों को कैश कर सकते हैं, मान लें कि 24 घंटे।IIS7 कैश-नियंत्रण

मैं http://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static-content.aspx पर लेकिन कोई लाभ नहीं हुआ कदम की कोशिश की है। मुझे अभी भी 304 के साथ सर्वर पर जाने के अनुरोध मिलते हैं।

किसी को भी ऐसा करने का एक तरीका है? मेरे पास एक ग्राफिक रूप से गहन साइट है और जब भी वे किसी पृष्ठ का अनुरोध करते हैं तो मेरे उपयोगकर्ताओं को हथौड़ा लगाया जाता है (इसलिए मेरा सर्वर भी है)। Wierdly छवियों के लिए "कैश नियंत्रण निजी, अधिकतम उम्र = 3600" Firebug में दिखाने लेकिन ब्राउज़र अभी भी उन्हें अनुरोध कर रहा है जब मैं F5 दबाएँ लगते हैं।

उत्तर

100

आप कैश नियंत्रण हेडर सेट करना चाहते हैं, वहाँ IIS7 यूआई में कुछ भी नहीं इस उदासी ऐसा करने के लिए, है।

आप फिर भी फ़ोल्डर या साइट के रूट में इस web.config ड्रॉप कर सकते हैं, जहां आप इसे सेट करना चाहते हैं:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
    <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> 
    </staticContent> 
    </system.webServer> 
</configuration> 

कि उस फ़ोल्डर में 7 दिनों के लिए कैश सामग्री के लिए ग्राहक को सूचित करेंगे और सभी सबफ़ोल्डर्स।

इस संपादन IIS7 मेटाबेस द्वारा appcmd.exe के माध्यम से ऐसा तरह कर सकते हैं,:

 
\Windows\system32\inetsrv\appcmd.exe 
    set config "Default Web Site/folder" 
    -section:system.webServer/staticContent 
    -clientCache.cacheControlMode:UseMaxAge 

\Windows\system32\inetsrv\appcmd.exe 
    set config "Default Web Site/folder" 
    -section:system.webServer/staticContent 
    -clientCache.cacheControlMaxAge:"7.00:00:00" 
+5

staticContent कॉन्फ़िगरेशन तत्व के लिए एमएसडीएन दस्तावेज़ यहां पाया जा सकता है: http://msdn.microsoft.com/en-us/library/ms689443.aspx –

+4

नीचे 360 एयरवाक पोस्ट देखें, आईआईएस 7 – ChadT

+0

में इसके लिए यूआई है : इस सेटिंग का अंतर्निहित विकास सर्वर (कम से कम वीएस 2010 एसपी 1) पर कोई प्रभाव नहीं पड़ता है। यदि संदेह है कि यह क्यों काम नहीं करता है, तो आईआईएस के साथ जांच करें। –

19

F5 ताज़ा "वर्तमान HTML फिर से लोड करें और इसके प्रत्यक्ष dependancies" का अर्थ है। इसलिए आपको एचटीएमएल द्वारा सीधे संदर्भित किसी भी आईएमजीएस, सीएसएस और जेएस संसाधन को देखने की उम्मीद करनी चाहिए। बेशक एक 304 इस के लिए एक स्वीकार्य प्रतिक्रिया लेकिन F5 ताज़ा संकेत मिलता है कि ब्राउज़र अनुरोध करने के बजाय ताजा कैश सामग्री पर भरोसा नहीं है।

इसके बजाय बस कहीं और नेविगेट करने और फिर वापस नेविगेट करने का प्रयास करें।

आप ताज़ा, पिछले एक 304, ctrl दबाते हुए अधिकांश ब्राउज़र में F5 दबा कर मजबूर कर सकते हैं।

+2

आप Ctrl + F5 सही मतलब जोड़ने! – Anicho

106

सच जेफ नहीं है यही कारण है कि।

आप बस अपनी आईआईएस 7 प्रबंधक UI (जैसे चित्र या घटना डिफ़ॉल्ट वेब अनुप्रयोग फ़ोल्डर) के भीतर एक फ़ोल्डर का चयन करने और फिर "HTTP प्रतिक्रिया हेडर" पर क्लिक करें है। फिर आपको दाएं फलक में "सामान्य हैडर सेट करें" पर क्लिक करना होगा और "एक्सपेयर वेब सामग्री" का चयन करना होगा। वहाँ आप आसानी से चुनने "के बाद:" द्वारा 24 घंटे की एक अधिकतम उम्र कॉन्फ़िगर कर सकते हैं, में प्रवेश "24" पाठ बॉक्स में और बता गया में "घंटे" चुनें।

web.config प्रविष्टि के बारे में अपने पहले पैराग्राफ सही है। मैं कैश नियंत्रण शीर्षलेख को "सार्वजनिक" या उस मामले में जो कुछ भी आवश्यक है उसे सेट करने के लिए cacheControlCustom-विशेषता जोड़ दूंगा।

आप, ज़ाहिर है, के रूप में की जरूरत web.config प्रविष्टियों (या फ़ाइलें) प्रदान करके ही हासिल कर सकते हैं।

संपादित करें: एक भ्रामक वाक्य :)

+1

सेट नहीं करें इस सेटिंग के लिए यूआई भयानक है। लेकिन यह समझाने के लिए धन्यवाद कि वहां कैसे पहुंचे! +1 –

+0

यह इंटरफ़ेस एक ही कॉन्फ़िगरेशन के साथ web.config बनाता है जैसा कि जेफ ने पोस्ट किया था। जानकर अच्छा लगा! धन्यवाद! – RandyMorris

+2

पोस्ट @ 360 एयरवाक के लिए धन्यवाद। क्या आप जानते हैं कि अलग-अलग माइम-प्रकार या फाइल एक्सटेंशन के लिए विभिन्न 'कैश-कंट्रोल' ('अधिकतम आयु ') शीर्षलेख कैसे प्रदान करें? – Jasper

21

मैं इस

<staticContent> 
<clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="500.00:00:00" /> 
</staticContent> 

सार्वजनिक कैश नियंत्रण हेडर के साथ 500 दिनों के लिए स्थैतिक सामग्री कैश करने के लिए उपयोग करते हैं हटा दिया।

+9

अनुशंसित अभ्यास के लिए इस पोस्ट को देख 1 वर्ष अनिवार्य रूप से 365 दिन है अब और नहीं। – Anicho

+5

500 दिन, खराब है लेख एक RFC नियम 1 वर्ष से अधिक करने के लिए कैश सेट नहीं करने के लिए कह बारे में बात करती है कि https://developers.google.com/speed/docs/best-practices/caching सेट न करें यह भविष्य में एक वर्ष से अधिक तक है, क्योंकि यह आरएफसी दिशानिर्देशों का उल्लंघन करता है। – foxontherock

16

एल्मर के उत्तर को पूरक, क्योंकि मेरा संपादन वापस लुढ़का गया था।

365 दिनों सार्वजनिक कैश नियंत्रण हेडर साथ के लिए स्थिर सामग्री को कैश करने के लिए, आईआईएस निम्नलिखित

<staticContent> 
    <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" /> 
</staticContent> 

साथ विन्यस्त किया जा सकता यह इस प्रकार से हैडर में अनुवाद होगा:

Cache-Control: public,max-age=31536000 

ध्यान दें कि अधिकतम उम्र सेकंड में एक डेल्टा, के रूप में RFC 2616 Sections 14.9.3 and 14.9.4 में कहा गया है एक सकारात्मक 32 बिट पूर्णांक द्वारा व्यक्त की जा रही है। यह 2^31 या 2,147,483,648 सेकंड (68 वर्ष से अधिक) के अधिकतम मूल्य का प्रतिनिधित्व करता है। हालांकि, ग्राहकों और सर्वरों के बीच संगतता सुनिश्चित करने के लिए, हम अनुशंसित अधिकतम 365 दिन (एक वर्ष) अपनाते हैं।

अन्य उत्तर पर उल्लेख किया है, आप इन निर्देशों भी अपनी साइट के web.config पर सभी स्थैतिक सामग्री के लिए उपयोग कर सकते हैं।

<location path="cdn"> 
    <system.webServer> 
     <staticContent> 
      <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00"/> 
     </staticContent> 
    </system.webServer> 
</location> 
+0

लुसियानो, मैं अपनी पद्धति का उपयोग करके मेरी इमेज को कैश करने की कोशिश कर रहा हूँ। अब जब मैं HttpFox का उपयोग करके विश्लेषण करता हूं तो मुझे प्रत्येक छवि के लिए 2 अनुरोध किए जाते हैं। 1. पहला व्यक्ति एक निरस्त परिणाम देता है (NS_BINDING_ABORTED) त्रुटि 2. दूसरा अनुरोध एक कैश की गई छवि है। कोई विचार? – Mithil

-1

एक आसान तरीका है: एक विकल्प के रूप में, आप यह केवल के लिए सामग्री एक विशिष्ट स्थान भी में (30 दिन सार्वजनिक कैश सामग्री के लिए "cdn" फ़ोल्डर में नमूना, पर) का उपयोग कर सकते 1. वेबसाइट के web.config का उपयोग कर 2. "staticContent" खंड में विशिष्ट fileExtension हटाने और mimeMap 3. ऐड "clientCache"

<configuration> 
    <system.webServer> 
    <urlCompression doStaticCompression="true" doDynamicCompression="true" /> 
    <staticContent> 
     <remove fileExtension=".ipa" /> 
     <remove fileExtension=".apk" /> 
     <mimeMap fileExtension=".ipa" mimeType="application/iphone" /> 
     <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" /> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="777.00:00:00" /> 
    </staticContent> 
    </system.webServer> 
</configuration>