วิธีการกำหนดค่าแคชเนื้อหาแบบคงที่ต่อโฟลเดอร์และนามสกุลใน IIS7?


143

ฉันต้องการตั้งค่ากฎใน IIS7 สำหรับการแคชเนื้อหาแบบคงที่ในเว็บไซต์ ASP.NET ของฉัน

ฉันได้เห็นบทความเหล่านี้ซึ่งมีรายละเอียดวิธีการใช้<clientCache />องค์ประกอบในweb.config:

ไคลเอนต์แคช<clientCache>(IIS.NET)
เพิ่มวันหมดอายุหรือส่วนหัวควบคุมแคชไปยังเนื้อหาแบบคงที่ใน IIS (กองมากเกินไป)

อย่างไรก็ตามการตั้งค่านี้ดูเหมือนจะใช้กับเนื้อหาแบบคงที่ทั้งหมด มีวิธีการทำเช่นนี้สำหรับไดเรกทอรีหรือส่วนขยายบางอย่างหรือไม่

ตัวอย่างเช่นฉันอาจมีสองไดเรกทอรีที่ต้องการตั้งค่าแคชแยก:

/static/images
/content/pdfs

มันเป็นไปได้ที่จะตั้งค่ากฎการส่งส่วนหัวของแคช ( max-age, expiresฯลฯ ) ตามนามสกุลและเส้นทางโฟลเดอร์?

โปรดทราบฉันจะต้องสามารถทำสิ่งนี้ผ่านweb.configเพราะฉันไม่สามารถเข้าถึงคอนโซล IIS

คำตอบ:


217

คุณสามารถตั้งค่าส่วนหัวแคชเฉพาะสำหรับทั้งโฟลเดอร์ในรูทของคุณweb.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- Note the use of the 'location' tag to specify which 
       folder this applies to-->
  <location path="images">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:15" />
      </staticContent>
    </system.webServer>
  </location>
</configuration>

หรือคุณสามารถระบุสิ่งเหล่านี้ในweb.configไฟล์ในโฟลเดอร์เนื้อหา:

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

ฉันไม่ทราบว่ามีกลไกในตัวเพื่อกำหนดเป้าหมายไฟล์ประเภทใด


1
ยิ่งใหญ่ คุณจะแนะนำหนังสือเกี่ยวกับ IIS 7 ให้ฉันได้ไหม ฉันต้องการเรียนรู้เกี่ยวกับสิ่งเหล่านี้ ขอบคุณ
vtortola

5
@vtortola - คุณไม่สามารถผิดพลาดได้ด้วย [IIS7 resource kit] (: amazon.co.uk/dp/0735624410 ) มันมีประโยชน์จริง ๆ หนังสือWrox Pro IIS7ก็ไม่ได้แย่เหมือนกัน TBH ฉันเรียนรู้ส่วนใหญ่จากไซต์อ้างอิงการกำหนดค่า IIS.NET : iis.net/ConfigReferenceและจากการพูดคุยเกี่ยวกับ%systemroot%\system32\inetsrv\config\applicationhost.configไฟล์และเพื่อนที่เกี่ยวข้อง
Kev

7
ไม่มีใครรู้ว่าสิ่งนี้ซ้ำ เช่นถ้าคุณมีโฟลเดอร์ย่อยภายใต้พา ธ ของรูปภาพคุณจะแคชเหล่านั้นหรือไม่
StuffandBlah

1
สิ่งหนึ่งที่ควรทราบคือเบราว์เซอร์ดูเหมือนจะเห็นpath=""ว่าตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
Chris S

9
@StuffandBlah ใช่มันเป็นแบบเรียกซ้ำ ลองด้วยตัวเองแล้ว IIS ก็ใช้การตั้งค่าควบคุมแคชแบบเดียวกันกับคำขอทั้งหมดสำหรับไฟล์ในโฟลเดอร์ย่อยของโฟลเดอร์ที่ฉันระบุว่า "ตำแหน่ง"
Erik Öjebo

68

คุณสามารถทำได้แบบต่อไฟล์ ใช้แอตทริบิวต์ path เพื่อรวมชื่อไฟล์

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <location path="YourFileNameHere.xml">
        <system.webServer>
            <staticContent>
                <clientCache cacheControlMode="DisableCache" />
            </staticContent>
        </system.webServer>
    </location>
</configuration>

1
และถ้าคุณต้องการที่จะนำไปใช้กับไฟล์ทั้งหมดของนามสกุลที่เฉพาะเจาะจง? .xml หรือ * .xml เพียงอย่างเดียวจะทำงานได้หรือไม่
Zulgrib

2
@Zulgrib เพื่อนำไปใช้กับส่วนขยายเฉพาะที่คุณสามารถใช้กฎการเขียน
ซ้ำ

@Zulgrib เราจะใช้แท็กตำแหน่งที่ตั้งได้อย่างไรมากกว่าหนึ่งไฟล์ แต่ไม่ใช่ไฟล์ทุกประเภท เช่นไฟล์ jpg สองสามไฟล์ในโฟลเดอร์ root แต่ไม่ใช่ทั้งหมดหรือไม่
Rahatur

-2

ฉันมีปัญหาเดียวกันสำหรับฉันปัญหาคือวิธีการกำหนดค่าขีด จำกัด แคชให้กับรูปภาพและฉันเข้ามาในไซต์นี้ซึ่งให้ข้อมูลเชิงลึกเกี่ยวกับขั้นตอนวิธีจัดการกับปัญหาหวังว่ามันจะมีประโยชน์สำหรับคุณเช่นกันลิงก์ : [ https://varvy.com/pagespeed/cache-control.html]


2
โปรดพิจารณาการเพิ่มข้อมูลจากลิงก์ไปยังคำตอบของคุณตามstackoverflow.com/help/how-to-answer : สนับสนุนลิงก์ไปยังแหล่งข้อมูลภายนอก แต่โปรดเพิ่มบริบทรอบลิงก์เพื่อให้ผู้ใช้ของคุณมีความคิดว่ามันคืออะไร และทำไมมันถึงอยู่ที่นั่น อ้างถึงส่วนที่เกี่ยวข้องที่สุดของลิงค์สำคัญเสมอในกรณีที่เว็บไซต์เป้าหมายไม่สามารถเข้าถึงหรือออฟไลน์อย่างถาวร
Greg The Incredulous
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.