web-dev-qa-db-ja.com

IIS7キャッシュ制御

私はかなり簡単だと思った何かをしようとしています。 Get IIS 7を使用して、一定の時間、たとえば24時間、サイト上のすべての画像をキャッシュできることをクライアントに伝えます。

私は ステップを試してみましたhttp://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static -content.aspx が利用できません。私はまだ304が返された状態でサーバーにリクエストを送っています。

誰にもこれを行う方法がありますか?私はグラフィカルに集中したサイトを所有しており、ユーザーがページをリクエストするたびにユーザー(サーバーも同様)が攻撃されています。奇妙なことに、Firebugには「Cache-Control private、max-age = 3600」が表示されているように見えますが、F5を押したときにブラウザーはまだそれらを要求しています。

90
Chris Meek

Cache-Controlヘッダーを設定する場合、残念ながらIIS7 UIにはこれを行うものはありません。

ただし、この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日間コンテンツをキャッシュするようにクライアントに通知します。

次のように、appcmd.exeを介してIIS7メタベースを編集することでもこれを実行できます。

\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" 
119
Jeff Atwood

それは本当ではありませんジェフ。

IIS 7 Manager UI(たとえば、画像またはイベントデフォルトWebアプリケーションフォルダー)内のフォルダーを選択し、[HTTP応答ヘッダー]をクリックする必要があります。その後、[右側のペインで[共通ヘッダーを設定]を選択し、[Webコンテンツの有効期限]を選択します。[後:]を選択し、テキストボックスに「24」と入力して[時間]を選択すると、コンボボックスで。

Web.configエントリに関する最初の段落は正しいです。 cacheControlCustom-attributeを追加して、キャッシュ制御ヘッダーを「public」またはその場合に必要なものに設定します。

もちろん、必要に応じてweb.configエントリ(またはファイル)を提供することで同じことを実現できます。

編集:紛らわしい文を削除しました:)

112
360Airwalk

これを使う

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

パブリックキャッシュ制御ヘッダーを使用して静的コンテンツを500日間キャッシュします。

25
Elmer

F5リフレッシュには、「現在のHTMLを再読み込みしてください[〜#〜] and [〜#〜]その直接依存関係」があります。そのため、HTMLによって直接参照されるimg、css、jsリソースも再取得されることを期待する必要があります。もちろん、これに対する304の応答は許容されますが、F5の更新は、ブラウザーが新しいキャッシュコンテンツに依存するのではなく、要求を行うことを意味します。

代わりに、単に他の場所に移動してから戻ってみてください。

ほとんどのブラウザでctrlを押しながらf5を押すと、304を過ぎて強制的に更新できます。

19
AnthonyWJones

編集がロールバックされたため、エルマーの答えを補完します。

静的コンテンツを365日間キャッシュするにはwith public cache-control header、IISは次のように設定できます

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

これは、次のようなヘッダーに変換されます。

Cache-Control: public,max-age=31536000

Max-ageは秒単位のデルタであり、 RFC 2616セクション14.9.3および14.9.4 で述べられているように、正の32ビット整数で表されることに注意してください。これは、2 ^ 31または2,147,483,648秒(68年以上)の最大値を表します。ただし、クライアントとサーバー間の互換性を確保するために、推奨される最大365日(1年)を採用しています。

他の回答で述べたように、これらのディレクティブはサイトのweb.configでもすべての静的コンテンツに使用できます。別の方法として、特定の場所のコンテンツにも使用できます(サンプルでは、​​「cdn」フォルダー内のコンテンツの30日間のパブリックキャッシュ)。

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

簡単な方法があります:1. Webサイトの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>
0
user1401317