私は ASP.NET WebApi を使用しており、すべてのキャッシュを停止する次のコードがあります。
public override System.Threading.Tasks.Task<HttpResponseMessage> ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext controllerContext, System.Threading.CancellationToken cancellationToken)
{
System.Threading.Tasks.Task<HttpResponseMessage> task = base.ExecuteAsync(controllerContext, cancellationToken);
task.GetAwaiter().OnCompleted(() =>
{
task.Result.Headers.CacheControl = new CacheControlHeaderValue()
{
NoCache = true,
NoStore = true,
MaxAge = new TimeSpan(0),
MustRevalidate = true
};
task.Result.Headers.Pragma.Add(new NameValueHeaderValue("no-cache"));
task.Result.Content.Headers.Expires = DateTimeOffset.MinValue;
});
return task;
}
結果のヘッダーは次のようになります (chrome):
Cache-Control:no-store, must-revalidate, no-cache, max-age=0
Content-Length:1891
Content-Type:application/json; charset=utf-8
Date:Fri, 19 Jul 2013 20:40:23 GMT
Expires:Mon, 01 Jan 0001 00:00:00 GMT
Pragma:no-cache
Server:Microsoft-IIS/8.0
バグについて読んだ後、「no-store」を追加しました(Chromeのキャッシュを停止する方法)。
ただし、何をしても、このページから移動して「戻る」ボタンを使用すると、クロムは常にキャッシュから読み込まれます。
Request Method:GET
Status Code:200 OK (from cache)
なぜこれが起こっているのか誰にも分かりますか?このリクエストでサーバーがヒットすることはありません。