Подтвердить что ты не робот

Как остановить хром от кеширования ответа REST от WebApi?

Я использую 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;
}

Заголовки результатов выглядят следующим образом (хром):

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" после прочтения об ошибке (Как остановить хром от кеширования).

Однако, независимо от того, что я делаю, когда я делаю что-то, что отталкивает меня от этой страницы, а затем используйте кнопку "назад", хром всегда загружается из кеша:

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

Кто-нибудь знает, почему это происходит? Я подтвердил, что для этого запроса сервер никогда не попадает.

4b9b3361

Ответ 1

Ответ: Chrome не любит "Expires: Mon, 01 Jan 0001 00:00:00 GMT" (фальшивая дата, в основном).

Я изменил свою дату на то, что они используют в своем API Google, и это сработало:

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

Итак, для тех, кто сталкивается с этой проблемой, убедитесь, что вы установите дату истечения срока действия на эту произвольную дату!