2013-07-19 8 views
12

私はASP.NET WEBAPIを使用して、すべてでキャッシュを停止するには、次のコードを持っています:WebApiからのREST応答をキャッシュしないようにクロームを停止するにはどうすればよいですか?

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; 
} 

結果ヘッダがこの(クロム)のようになります。

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-を追加しましたバグについて(How to stop chrome from caching)を読んだ後に "store"してください。

私はこのページから私をナビゲートする何かをした後、「戻る」ボタンを使用する場合しかし、関係なく、私は何をすべきか、クロムは常にキャッシュからロードしません:

Request Method:GET 
Status Code:200 OK (from cache) 

誰もがいずれかを持っていますなぜこれが起こっているのか?私はサーバーがこの要求に対して決して命中しないことを確認しました。

答えて

7

答えは、Chromeが「Expires:Mon、01 Jan 0001 00:00:00 GMT」(基本的に偽の日付)を好まないということです。

私は彼らのGoogle APIで使用しているものであることを私の日付を変更し、それが働いた:

Cache-Control:no-store, must-revalidate, no-cache, max-age=0 
Content-Length:1897 
Content-Type:application/json; charset=utf-8 
Date:Fri, 19 Jul 2013 20:51:49 GMT 
Expires:Mon, 01 Jan 1990 00:00:00 GMT 
Pragma:no-cache 
Server:Microsoft-IIS/8.0 

ので、この問題に遭遇誰のために、あなたはあなたを設定してください。この任意の日付を有効期限日付!

+0

no-storeを設定した場合は、no-store、no-storeと矛盾するため、no-cache、must-revalidate、max-ageおよびexpiresを設定しないでください。店舗無しとは、表現を保存できないことを意味し、残りの命令は保存された表現を管理するための規則を説明する。 –

+0

私はちょうどno-storeを追加しました。なぜなら、no-cacheを無視して有効期限が切れるChromeのバグのためにストアを追加しなかったからです(http://stackoverflow.com/questions/4146813/how-to-stop-chrome-from-cachingを参照)... so私はあなたが私にそれについて何をしたいのか分かりません。 – automaton

+0

残念ながら、no-cacheはキャッシュしないことを意味しません。また、Chromeがキャッシュされたコピーを使用できないことを意味しません。つまり、キャッシュされたコピーを使用する前に、サーバーと確認する必要があります。サーバーが正しい情報を返さない場合、クロムは幸いにキャッシュされた結果を返します。 –

関連する問題