微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – 生成PDF,IE和HTTPS错误

我在ASP.NET 2.0中将PDF流式传输到浏览器.这可以在所有浏览器中通过HTTP和除IE之外的所有浏览器通过HTTPS进行.据我所知,这在IE的所有版本中曾经工作过(过去5年左右),但是我们的客户最近才开始报告问题.我怀疑认情况下,不要将加密的页面保存到磁盘安全性选项,这些选项将被禁用,并且在某些时候,认情况下会启用(Internet选项 – >高级 – >安全性).关闭此选项有助于作为一种解决方案,但不能作为长期解决方案.

我收到的错误信息是:

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时能够重现问题,但还没有解决方案.赏金会过期…

解决方法

您的缓存控制标题不正确.它应该是Cache-Control:max-age = 1,中间有破折号.尝试先修复它,看看它是否有所作为.

通常,我会说,最可能的罪魁祸首是你的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.

原文地址:https://www.jb51.cc/aspnet/249577.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐