ブラウザに画像を返すカスタム ハンドラがあります。
画像はデータベースから取得されます。
何らかの理由で画像がブラウザによってキャッシュされていないため、誰かが以下のコードに欠けているものを見つけることができるかどうか疑問に思っていました:
HttpContext.Current.Response.BinaryWrite(imageBytes);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
Context.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);
if(imgRepGetCache.DateCached.HasValue)
HttpContext.Current.Response.Cache.SetLastModified(imgRepGetCache.DateCached.Value);
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(2));
HttpContext.Current.Response.ContentType = "image/jpeg";
または、どういうわけかポイントを完全に見逃していて、他に探す必要がある場所がある場合。
編集:詳細情報のリクエストに従って:
- URLはいつも同じ
- 同じPCの同じブラウザで、標準のIISパイプと私のパイプを介して同じファイルをロードすることをテストしています。通常、IIS を介して読み込まれるファイルはキャッシュされますが、私のファイルはキャッシュされません。
編集 2:通常の IIS ルートで HTTP 要求/応答を調べた後、ETag と関係があると思います。ETag(私は今のところ初めてです)は、ドキュメントの一種のチェックサムのようです。ブラウザーによる後続の要求で ETag が送信され、サーバーが ETag が変更されていないことを検出した場合、サーバーは 304 - Not Modified を返します。すべて良い!しかし、私は今、次を使用してETagを設定しています:
HttpContext.Current.Response.Cache.SetETag(imgRepGetCache.DateCached.ToString());
しかし、それは応答に表示されません。クローザー...
編集 3: HTTP 検査の楽しみのために Firebug を利用した後、最終的に修正しました。以下に私の解決策を投稿しました。