Cache-control: no-store, must-revalidate не отправляется браузеру клиента в IIS7 + ASP.NET MVC

Я пытаюсь убедиться, что определенная страница никогда не кэшируется и никогда не отображается, когда пользователь нажимает кнопку «Назад». Этот очень высоко оцененный ответ (в настоящее время 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's 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, поэтому он выглядит как проблема с сервером, а не проблема, связанная с браузером.

    Через пробную версию и ошибку я обнаружил, что один из способов правильно настроить заголовки для IIS7 в ASP.NET MVC:

     Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.AppendCacheExtension("no-store, must-revalidate"); Response.AppendHeader("Pragma", "no-cache"); Response.AppendHeader("Expires", "0"); 

    Первая строка устанавливает Cache-control в no-cache , а вторая строка добавляет другие атрибуты no-store, must-revalidate .

    Это может быть не единственный способ, но предоставляет альтернативный метод, если более простой Response.AppendHeader("Cache-control", "no-cache, no-store, must-revalidate"); выходит из строя.

    Другие связанные с IIS7 вопросы управления кешем, которые могут быть решены этим:

    • Что-то вызывает реакцию на кеш-контроль: частный в IIS7
    • IIS7: настройка кеша не работает … почему?
    • IIS7 + ASP.NET MVC-кеширование кэшей заголовков не работает
    • Установить кеш-контроль для страниц aspx
    • Cache-control: no-store, must-revalidate не отправляется браузеру клиента в IIS7 + ASP.NET MVC