我收到的错误信息是:
Internet Explorer cannot download OutputReport.aspx from www.sitename.com.
Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later.
用于创建PDF的工具是从DataDynamics开始的ActiveReports.一旦创建了PDF,以下是将其发送的代码:
Response.ClearContent() Response.ClearHeaders() Response.AddHeader("cache-control","max-age=1") Response.ContentType = "application/pdf" Response.AddHeader("content-disposition","attachment; filename=statement.pdf") Response.AddHeader("content-length",mem_stream.Length.ToString) Response.BinaryWrite(mem_stream.ToArray()) Response.Flush() Response.End()
注意:如果我没有明确指定缓存控制,那么.NET会代我发送无缓存,所以我已经尝试将cache-control设置为private或public或maxage =#,但这些都不行.
这是扭曲的:当我运行Fiddler检查响应标题时,一切都正常.我收到的标题是:
HTTP/1.1 200 OK
Cache-Control: max-age=1
Date: Wed,29 Jul 2009 17:57:58 GMT
Content-Type: application/pdf
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
content-disposition: attachment; filename=statement.pdf
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
一旦我关闭了Fiddler,再试一次,它再次失败.我注意到的另一件事是,当Fiddler正在运行时,我得到一个本网站的安全证书警告消息有问题,我必须点击继续访问本网站(不推荐)才能通过.当Fiddler关闭时,我不会遇到此安全警告,并且立即失败.
我很好奇Fiddler和浏览器之间发生了什么,所以当Fiddler正在运行时,它可以工作,但是当它没有运行时就会中断,但更重要的是,有没有人有任何想法,我可以如何更改我的代码,因此将PDF转换为IE将无需更改到客户机?
更新:Fiddler问题得到解决,非常感谢EricLaw,所以现在它的行为一贯(破碎,有或没有Fiddler运行).
基于Google搜索,似乎有很多关于这个同样问题的报告遍布网络,每个都有自己的特定组合的响应标题,似乎可以解决个别情况的问题.我尝试过许多建议,包括添加ETag,LastModified日期,删除Vary标题(使用Fiddler)和数十种Cache-Control和/或Pragma头文件的组合.我尝试“Content-Transfer-Encoding:binary”以及ContentType的“application / force-download”.迄今为止没有任何帮助.有一个few Microsoft KB articles,所有这些都表示Cache-Control:无缓存是罪魁祸首.任何其他想法?
更新:顺便说一下,为了完整,Excel和Word输出也会出现同样的问题.
更新:没有进展.我通过电子邮件将.ZZZ文件从Fiddler发送到EricLaw,并且在调试IE时能够重现问题,但还没有解决方案.赏金会过期…
解决方法
通常,我会说,最可能的罪魁祸首是你的Vary标头,因为这样的标题通常会导致IE:http://blogs.msdn.com/ieinternals/archive/2009/06/17/9769915.aspx中的缓存问题.您可能想尝试向响应头添加一个ETAG.
Fiddler应该对可缓存性没有影响(除非你已经写了规则),而且听起来像你说的那样,这表明也许有某种时间问题.
>默认情况下,不要将加密的页面保存到用于禁用的磁盘安全选项
默认情况下,此选项仍然禁用(在IE6,7和8中),尽管IT管理员可以通过组策略来启用该选项,而一些主要公司也是这样做的.
顺便说一下,运行Fiddler时看到证书错误的原因是您没有选择信任Fiddler根证书;有关此主题的更多信息,请参阅http://www.fiddler2.com/fiddler/help/httpsdecryption.asp.