gpt4 book ai didi

asp.net - 生成 PDF,IE 和 HTTPS 出错

转载 作者:行者123 更新时间:2023-12-04 01:04:53 25 4
gpt4 key购买 nike

我正在将 PDF 流式传输到 ASP.NET 2.0 中的浏览器。这适用于通过 HTTP 的所有浏览器和通过 HTTPS 的除 IE 之外的所有浏览器。据我所知,这曾经(在过去 5 年左右)在所有版本的 IE 中都有效,但我们的客户最近才开始报告问题。我怀疑“不要将加密的页面保存到磁盘”安全选项在默认情况下是禁用的,并且在某些时候默认启用(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 代表我发送 no-cache,所以我尝试将缓存控制设置为: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,都已损坏)。

根据谷歌搜索,网络上似乎有很多关于同一问题的报告,每个报告都有自己特定的响应 header 组合,似乎可以针对各自的情况解决问题。我已经尝试了许多这些建议,包括添加 ETag、LastModified 日期、删除 Vary header (使用 Fiddler)以及 Cache-Control 和/或 Pragma header 的数十种组合。我为 ContentType 尝试了“内容传输编码:二进制”以及“应用程序/强制下载”。到目前为止没有任何帮助。有 few Microsoft KB articles ,所有这些都表明 Cache-Control: no-cache 是罪魁祸首。还有其他想法吗?

更新:顺便说一下,为了完整性,Excel 和 Word 输出也会出现同样的问题。

更新:没有取得任何进展。我将 .SAZ 文件从 Fiddler 通过电子邮件发送给 EricLaw,他在调试 IE 时能够重现该问题,但目前还没有解决方案。赏金即将到期...

最佳答案

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

通常,我会说最有可能的罪魁祸首是您的 Vary header ,因为此类 header 通常会导致 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有关此主题的更多信息。

关于asp.net - 生成 PDF,IE 和 HTTPS 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com