Bagaimana cara mengkonfigurasi cache konten statis per folder dan ekstensi di IIS7?

143

Saya ingin menetapkan aturan di IIS7 untuk caching konten statis di situs web ASP.NET saya.

Saya telah melihat artikel ini, yang merinci cara melakukannya menggunakan <clientCache />elemen di web.config:

Cache Klien <clientCache>(IIS.NET)
Tambahkan Kedaluwarsa atau Header Kontrol Cache ke konten statis di IIS (Stack Overflow)

Namun, pengaturan ini tampaknya berlaku secara global untuk semua konten statis. Apakah ada cara untuk melakukan ini hanya untuk direktori atau ekstensi tertentu?

Sebagai contoh, saya mungkin memiliki dua direktori yang memerlukan pengaturan cache terpisah:

/static/images
/content/pdfs

Apakah mungkin untuk mengatur aturan untuk mengirimkan header cache ( max-age, expires, dll) berdasarkan ekstensi dan jalur folder?

Harap dicatat, saya harus dapat melakukan ini melalui web.configkarena saya tidak memiliki akses ke konsol IIS.

frankadelic
sumber

Jawaban:

217

Anda dapat mengatur header-cache spesifik untuk seluruh folder di root Anda 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>

Atau Anda dapat menentukan ini di web.configfile di folder konten:

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

Saya tidak mengetahui adanya mekanisme bawaan untuk menargetkan jenis file tertentu.

Kev
sumber
1
Bagus. Apakah Anda merekomendasikan saya buku tentang IIS 7? Saya ingin belajar tentang hal-hal ini. Terima kasih.
vtortola
5
@vtortola - Anda tidak dapat salah dengan [IIS7 resource kit] (: amazon.co.uk/dp/0735624410 ), ini sebenarnya cukup berguna. Buku Wrox Pro IIS7 juga tidak buruk. TBH saya belajar sebagian besar dari situs referensi konfigurasi IIS.NET : iis.net/ConfigReference dan dari menyodok tentang %systemroot%\system32\inetsrv\config\applicationhost.configfile dan teman-teman terkait.
Kev
7
Adakah yang tahu apakah ini bersifat rekursif? mis. Jika Anda memiliki sub folder di bawah jalur gambar Anda, apakah itu juga akan menyimpannya?
StuffandBlah
1
Satu hal yang perlu diperhatikan adalah browser tampaknya melihat path=""case-sensitive
Chris S
9
@StuffandBlah Ya, ini bersifat rekursif. Baru saja mencobanya sendiri dan IIS menerapkan pengaturan kontrol cache yang sama untuk semua permintaan file dalam subfolder dari folder yang saya tentukan sebagai "lokasi".
Erik Öjebo
68

Anda dapat melakukannya berdasarkan file per. Gunakan atribut path untuk memasukkan nama file

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <location path="YourFileNameHere.xml">
        <system.webServer>
            <staticContent>
                <clientCache cacheControlMode="DisableCache" />
            </staticContent>
        </system.webServer>
    </location>
</configuration>
Jeff Cuscutis
sumber
1
Dan jika Anda ingin menerapkannya ke semua file dari ekstensi tertentu? apakah .xml atau * .xml saja dapat berfungsi?
Zulgrib
2
@ Zulgrib untuk menerapkannya pada ekstensi tertentu Anda dapat menggunakan aturan penulisan ulang keluar: stackoverflow.com/questions/32987486/…
jotap
@ Zulgrib Bagaimana kita menggunakan tag lokasi untuk lebih dari satu file tetapi tidak semua file jenis. Misalnya beberapa file jpg di folder root tetapi tidak semua?
Rahatur
-2

Saya memiliki masalah yang sama. Bagi saya masalahnya adalah bagaimana mengkonfigurasi batas cache untuk gambar. Dan saya menemukan situs ini yang memberikan beberapa wawasan tentang prosedur tentang bagaimana masalah tersebut dapat ditangani. Semoga bermanfaat bagi Anda juga. Tautan : [ https://varvy.com/pagespeed/cache-control.html]

Vikum Charuka Egodapitiya
sumber
2
Harap pertimbangkan untuk menambahkan beberapa informasi dari tautan ke jawaban Anda sesuai stackoverflow.com/help/how-to-answer : Tautan ke sumber daya eksternal dianjurkan, tetapi harap tambahkan konteks di sekitar tautan sehingga sesama pengguna Anda akan mengetahui apa itu. dan mengapa itu ada di sana. Selalu kutip bagian yang paling relevan dari tautan penting, jika situs target tidak dapat dijangkau atau offline secara permanen.
Greg yang Luar Biasa