Comment arrêter le chrome de mettre en cache la réponse REST de WebApi?
Je suis en utilisant ASP.NET WebApi et avez le code suivant pour arrêter la mise en cache dans tout:
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;
}
Le résultat des en-têtes ressembler à ceci (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
J'ai ajouté le "no-store" après avoir lu sur le bug (Comment arrêter de google chrome à partir de la mise en cache).
Toutefois, peu importe ce que je fais, quand je fais quelque chose qui navigue m'éloigner de cette page, puis utilisez le bouton "retour", le chrome est toujours chargé à partir du cache:
Request Method:GET
Status Code:200 OK (from cache)
Quelqu'un a une idée pourquoi ce qui se passe? J'ai confirmé que le serveur n'est jamais atteint pour cette demande.
source d'informationauteur automaton
Vous devez vous connecter pour publier un commentaire.
La réponse est que Chrome n'aime pas les "Expires:Mon, 01 Jan 0001 00:00:00 GMT" (un faux jour, essentiellement).
J'ai changé ma date pour être ce qu'ils utilisent dans leur API de Google, et cela a fonctionné:
Donc, pour quelqu'un d'autre qui vient sur ce problème, assurez-vous de définir votre Expiration de la date de cette date arbitraire!