2

私が働いている会社には、ASP.NET MVC2 で開発され、IIS7 でホストされている Web アプリケーションがあります。

特定のアクションでは、配列を保持する JsonResult オブジェクトを返します。この配列は毎日更新されます。そのため、同じ日に受信したリクエストはすべて同じレスポンスになります。

public ActionResult SomeAction(int id)
{
    // Some calculations
    return Json(resultArray, JsonRequestBehavior.AllowGet);
}

運用にコストがかかるため、ブラウザのキャッシュなどでパフォーマンスを向上させたいと考えていました。

キャッシュ ヘッダーを追加したので、データベースの次の更新まで結果をキャッシュするようにユーザー ブラウザーに指示しています。

それに加えて、「Last-Modified」ヘッダーを追加したいので、ブラウザは指定された日付の後にソースが変更されたかどうかを尋ねます。

それを達成する方法は何ですか?ブラウザーが要求した日付 (Last-Modified ヘッダー) の後に DB が変更されているかどうかを確認したい。変更されていない場合は、IIS が静的ファイル (画像、css、js ファイルなど) に対して自動的に行う 304 を返したい。

4

1 に答える 1

3

正直なLast-Modifiedヘッダーを追加します。データが毎日更新されている場合、その時期を知っているはずですよね?

次に、アクション メソッドの先頭にIf-Modified-Since、HTTP 要求の日時文字列を解析し、データの実際の最終変更時刻と照合して、受信のチェックを追加します。データが変更されていない場合は、手動で 304 を返すだけです。持っている場合は、アクション メソッドが通常行うことを行います。

また (または代わりに)コンテンツと共にETagを返すこともできます。その値は、コンテンツが変更されるたびに変更する必要があります。

次に、再利用できるように、すべてをASP.NET MVC アクション フィルターとしてラップします。

次に、それについてブログに投稿します。:)

不正な動作をするクライアントや、何もキャッシュしないクライアント (おそらく、データはデスクトップ ブラウザーではなくアプリケーションによって読み込まれる) から保護するために、アクション メソッドの結果を ASP.NET 出力キャッシュに保存して、コストのかかる操作。ただし、絶対有効期限を実装する 必要があるVaryByCustomでしょう。

于 2011-10-02T22:10:33.067 に答える