Я пытаюсь убедиться, что определенная страница никогда не кэшируется и никогда не отображается, когда пользователь нажимает кнопку "Назад". Этот очень высоко оцененный ответ (в настоящее время 1068 upvotes) говорит, чтобы использовать:
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");
Однако в IIS7/ASP.NET MVC, когда я отправляю эти заголовки, вместо этого клиент видит эти заголовки ответов:
Cache-control: private, s-maxage=0 // that not what I set them to
Pragma: no-cache
Expires: 0
Что случилось с заголовком управления кешем? Заменяет ли что-то, родное IIS7 или ASP.NET? Я проверил свое решение, и у меня нет кода, который перезаписывает этот заголовок.
Когда я добавляю Response.Headers.Remove("Cache-Control");
во-первых, это не имеет значения:
Response.Headers.Remove("Cache-Control");
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");
Когда я добавляю атрибут [OutputCache]
:
[OutputCache(Location = OutputCacheLocation.None)]
public ActionResult DoSomething()
{
Response.Headers.Remove("Cache-Control");
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");
var model = DoSomething();
return View(model);
}
Затем заголовки ответов клиента меняются на:
Cache-control: no-cache
Pragma: no-cache
Expires: 0
Что ближе, но все равно не заголовки, которые я хочу отправить. Где эти заголовки переопределяются и как я могу остановить его?
EDIT: я проверил, и неправильные заголовки отправляются в Chrome, FF, IE и Safari, поэтому он выглядит как проблема с сервером, а не проблема, связанная с браузером.