Не удалось переопределить заголовки кэша http в IIS с помощью PreSendRequestHeaders () - PullRequest
4 голосов
/ 18 октября 2011

История
Из соображений безопасности наша организация хочет отключить кэширование, добавив заголовки HTTP в IIS.

Истекает: -1
Прагма: без кеша
Управление кешем: No-cache, No-store

Добавление этих заголовков приводит к тому, что типы ответов MIME " application / vnd.ms-excel " перестают работать SSL в IE6 . Microsoft признает, что это ошибка (http://support.microsoft.com/kb/323308), и их решение также работает. Однако это решение должно быть распространено как исправление во всей организации и сталкивается с сопротивлением со стороны высшего руководства.

Проблема:
Тем временем мы пытаемся найти альтернативы, переопределяя заголовки HTTP набора IIS для страниц, имеющих MIME-тип «application / vnd.ms-excel», используя HTTPModules on PreSendRequestHeaders () function

//this is just a sample code
public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += new EventHandler(context_PreSendRequestHeaders);

        }
protected void context_PreSendRequestHeaders(object sender, EventArgs e) 
        {
            HttpApplication application = (HttpApplication)sender;
            if(application.Response.ContentType == "application/vnd.ms-excel; name=DataExport.xls")
            {
                application.Response.ClearHeaders();
                application.Response.ContentType = "application/vnd.ms-excel; name=DataExport.xls";
                application.Response.AddHeader("Content-Transfer", "Encoding: base64");
                application.Response.AddHeader("Content-Disposition", "attachment;filename=DataExport.xls");
                application.Response.AddHeader("cache-control","private");
            }
        }

Даже после очистки заголовков с помощью ClearHeaders () IIS по-прежнему добавляет заголовки кэша перед отправкой ответа.

Вопросы:
Является ли этот подход использования ClearHeaders () в PreSendRequestHeaders () неправильным? Есть ли альтернатива переопределению заголовков кэша (Expires, Pragma, cache-control) с использованием библиотек, доступных в ASP.NET 1.1?

Разное:
Мы используем
Браузер: IE6 SP 3
Сервер: IIS 6
Платформа: .NET 1.1

Ответы [ 2 ]

2 голосов
/ 12 февраля 2014

Это становится проще с IIS 7.5+, если использовать расширение URL Rewrite и добавить правило для исходящих сообщений, чтобы убрать значение «no-store» в заголовке Cache-Control и заголовке Pragma.Этот набор правил поможет:

<outboundRules>
    <rule name="Always Remove Pragma Header">
        <match serverVariable="RESPONSE_Pragma" pattern="(.*)" />
        <action type="Rewrite" value="" />
    </rule>
    <rule name="Remove No-Store for Attachments">
        <conditions>
            <add input="{RESPONSE_Content-Disposition}" pattern="attachment" />
        </conditions>
        <match serverVariable="RESPONSE_Cache-Control" pattern="no-store" />
        <action type="Rewrite" value="max-age=0" />
    </rule>
</outboundRules>
1 голос
/ 09 июня 2015

Пожалуйста, смотрите:

Контроль кэша: нет хранилища, повторная проверка не должна отправляться в браузер клиента в IIS7 + ASP.NET MVC

Необходимо использоватьследующая последовательность вызовов внутри вашего обработчика PreSendRequestHeaders для правильной установки заголовков без кэширования, в противном случае заголовок Cache-Control будет перезаписан позже:

Response.Cache.SetCacheability (HttpCacheability.NoCache);Response.Cache.AppendCacheExtension («без хранилища, необходимо подтвердить»);Response.AppendHeader ("Pragma", "no-cache");Response.AppendHeader ("Expires", "0");

...