0

私の web.config では、静的コンテンツのキャッシュを追加しようとしています:

<system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseExpires" httpExpires="Sun, 1 Jan 2020 00:00:00 UTC" />
    </staticContent>
    <modules runAllManagedModulesForAllRequests="true" />
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
    </handlers>
  </system.webServer>

ただし、YSlow を実行すると! 「Add Expires Header」の評価はまだ F です。そのため、画像、CSS、Javascript ファイルなどの静的コンテンツがキャッシュされていないようです。

私が行ったweb.configの変更はServiceStackによって取得されないため、ServiceStackでこれを達成するにはどうすればよいですか。これは ASP.NET MVC で機能しますが、expires ヘッダーを含む静的コンテンツをサーバーにするにはどうすればよいですか?

これも試しましたが、静的ファイルはまだキャッシュされていません。

<system.webServer>
  <staticContent>
    <clientCache cacheControlMaxAge="30.00:00:00" cacheControlMode="UseMaxAge"/>
  </staticContent>
</system.webServer>
4

1 に答える 1

0

注: <staticContent>xml 構成は、ServiceStack などの独自の静的ファイル処理機能を提供する Web フレームワークには影響しません。

ServiceStack の静的ファイルはStaticFileHandlerによって処理され、静的ファイルのキャッシュに役立つ HTTP ヘッダーが自動的に追加されます。ヘッダーは、最後に要求されてから変更されていない静的ファイルに対して要求が行われたときLast-Modifiedに、空の応答を送信するために使用されます。304 Not Modified

Max-Age を静的ファイルに追加する

さらに、Cache-Control: max-age={Seconds}特定のファイル タイプを指定するためのオプションがあります。デフォルトでは、イメージ コンテンツ タイプの最大保存期間が含まれています。

SetConfig(new HostConfig {
    AddMaxAgeForStaticMimeTypes = {
        { "image/gif", TimeSpan.FromHours(1) },
        { "image/png", TimeSpan.FromHours(1) },
        { "image/jpeg", TimeSpan.FromHours(1) },
    }
});

コンテンツ タイプを追加して、上記のデフォルトを変更および拡張することもできます。

カスタム静的ファイル ヘッダーの追加

v4.0.33+の新機能は、StaticFileHandler.ResponseFilter静的ファイルに独自のカスタム ヘッダーを追加するために使用できる です。たとえば、これは1 時間で期限切れになるファイルのカスタム HTTPExpiresヘッダーを追加します。.txt

StaticFileHandler.ResponseFilter = (req, res, file) => {
    if (file.Extension == "txt")
        res.AddHeader("Expires", DateTime.UtcNow.AddHours(1).ToString("r"));
};

この変更はMyGet で利用できるようになりました。

于 2014-10-26T10:45:46.127 に答える