7

ユーザーが GET リクエストを介してダウンロードする特定のアイテムの有効期限を長く設定できるようにしたいと考えています。

「これは 10 分間有効です」と言いたい (つまり、+10 分間の Expires ヘッダーを設定したい)。リクエストは、AJAX を介してページに表示される HTML のフラグメントであり、ユーザーのセッションに適しています。サーバーに戻って、再度必要な場合に 304 を取得したくありません。ブラウザーのキャッシュで同じアイテムをすぐに取得できるようにしたいのです。

MVC アクション フィルターのキャッシュと圧縮に関するほぼ 1 年前の記事を見つけました。これにより、Expires ヘッダーを変更するためのカスタム ActionFilter が作成されます。私はすでに、生成しているいくつかのカスタム css でうまく機能する圧縮フィルターを使用しています (94% の圧縮率!)。

主な懸念事項が 2 つあります。

1) 本当にこの方法を使用する必要がありますか? 私はそれで問題ありませんが、MVC または OutputCache 機能にこれを行うための機能は本当にありませんか? 「従来の」ASP.NET では、常に Expires ヘッダーを手動で設定していましたが、少なくともコントローラーではそれを行うことはできません。

2) このフィルター メソッドを使用すると、web.config で制御できるようにしたい OutputCache ポリシーにまったく干渉しません。私は、この 2 つは相互に排他的であり、両方を必要としないと考えていますが、完全にはわかりません。

4

3 に答える 3

3
  1. いいえ、この方法を使用する必要はありませんただし、コントローラーのテストが容易になり、Web認識が低下するため、おそらくこれが選択するのに最適な方法だと思います。別の方法は、次のように、コントローラーでヘッダーを手動で設定することです。

    Response.AddHeader( "Expires"、 "Thu、01 Dec 1994 16:00:00 GMT");

  2. そうですね、OutputCache属性は、アクションが実行されるタイミングと、代わりにキャッシュされたHTMLを返すタイミングを制御します。Expiresは、HTMLをいつ再フェッチするかをブラウザに通知します。ですから、私はそれらを相互に排他的とは呼びませんが、それらは確かに同じコインの両面であり、あなたは両方を必要としないかもしれないと考えるのは正しいです。HTTP仕様を確認して、アプリケーションに最適なものを決定することをお勧めします。

于 2009-02-16T14:25:10.697 に答える
2

Response.Expires このプロパティは、ブラウザにキャッシュされたページの有効期限が切れるまでの分数を指定します。ユーザーが指定された分数の前に同じページに戻った場合、ページのキャッシュされたバージョンが表示されます。

Response.ExpiresAbsolute このプロパティを使用して、ブラウザにキャッシュされたページの有効期限が切れる日時を設定できます。

http://forums.asp.net/t/1532229.aspx

于 2011-05-10T10:14:57.850 に答える
0

ユーザーごとに変える必要があるようです:

http://aspadvice.com/blogs/ssmith/archive/2007/10/29/VaryByCustom-Caching-By-User.aspx

[OutputCache(Duration="10", VaryByCustom="username")]

Global.asax:

public override string GetVaryByCustomString(HttpContext context, string key)
{
    switch(key)
    {
        case "username":
            return context.User.Identity.Name;

        // Other VaryByCustom strategy implementations can go here.
    }

    return string.Empty;
}
于 2013-12-12T18:44:19.077 に答える