2014-01-04 1 views
2

У меня происходит сбой загрузки файла, где IE не загружает PDF через HTTPS, как описано here.Что можно изменить параметры управления кешем для загрузки файла?

Решение швов достаточно простое, установите правильные элементы управления кешированием. Проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, как я устанавливаю заголовки управления кэшем, они отображаются с одинаковыми значениями.

Вот код

context.Response.ClearContent() 
context.Response.ClearHeaders() 
context.Response.AppendHeader("Content-Disposition", String.Format("attachment;filename=RiskSummaryForm {0}.pdf", intSubno)) 
context.Response.ContentType = "application/pdf" 
context.Response.AppendHeader("Cache-Control", "no-store, no-cache, must-revalidate") 
context.Response.AppendHeader("X-Footest", "no-store, no-cache, must-revalidate") 
'context.Response.AppendHeader("Pragma", "token") 
'context.Response.Cache.SetCacheability(HttpCacheability.Private) 
Dim Doc As Document = GACIS.PRB.Doc.RiskSummaryForm.GetPDF(context, DocumentDataFormat.Binary) 
context.Response.OutputStream.Write(Doc.DataBinary, 0, Doc.DataBinary.Length) 
HttpContext.Current.ApplicationInstance.CompleteRequest() 

Здесь пока исходный заголовок из Fiddler2:

HTTP/1.1 200 OK 
Cache-Control: no-cache, no-store 
Pragma: no-cache 
Content-Type: text/html 
Expires: -1 
Server: Microsoft-IIS/7.5 
Content-Disposition: attachment;filename=RiskSummaryForm 300185.pdf 
X-Footest: no-store, no-cache, must-revalidate 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Sat, 04 Jan 2014 00:19:01 GMT 
Content-Length: 78193 

Независимо от того, как изменить кэширование результат всегда Cache-Control: нет кэша, нет -store и Pragma: no-cache.

Что может быть сброс заголовков кеша?

ответ

0

Я понял, что меняю заголовки кеша. Метод GetPDF, создающий класс документа, использует конвертер HTML в PDF, и эта страница HTML сбрасывает элементы управления кэшем.

Код OP работает корректно, если впоследствии вы не измените настройки кеша.

0

С помощью IIS 7.5+ используйте URL Rewrite extention для добавления исходящего правила, чтобы отключить значение «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>