让 ASP.NET / IIS 不缓存 PDF 文件的正确方法

发布于 2024-12-17 15:28:59 字数 485 浏览 0 评论 0原文

我有以下场景,我想要有关处理此问题的最佳方法的建议。我的 Web 应用程序 (ASP.NET 2.0 / IIS 6) 生成 PDF 文件,并且我有一个结果页面,其中包含指向这些 PDF 的链接。

现在,我注意到,如果我访问结果页面,单击 PDF 文件(在新窗口中打开),然后重新生成 PDF 文件,然后单击结果页面中的相同链接,则会显示旧 PDF ,而不是新的。我必须删除临时互联网文件才能看到新文件。

因此,由于我不提供实际编写 PDF 的 ASPX(并且我不希望显示“保存”对话框),而是直接链接到 PDF 文件,所以我想知道确保用户始终使用的最佳方法是什么看到服务器中的最新文件,而不是缓存版本。

我猜想添加无缓存标头是不可能的。但是 PDF 请求仍然会通过 HTTP 处理程序,所以我想知道是否应该创建一个特定的 HTTP 处理程序来拦截 PDF 请求,或者我是否应该在 IIS 级别执行此操作...但是我不一定希望避免缓存该网站上的所有 PDF。

有什么建议吗?预先感谢您的帮助。

I have the following scenario, and I wanted suggestions on what is the best way to handle this. My web app (ASP.NET 2.0 / IIS 6) generates PDF files, and I have a results page with links to those PDFs.

Now, I noticed that if I visit the results page, click on a PDF file (it opens in a new window), then re-generate the PDF file, and click on the same link in the results page, the OLD PDF is shown, instead of the new one. I had to delete the temporary internet files in order to see the new one.

So, since I'm NOT serving an ASPX that actually writes the PDF (and I do not want the Save dialog to show), but straight linking to the PDF file, I want to know what the best way to make sure the user always sees the latest file in the server, not a cached version.

I'm guessing adding no-cache headers is out of the question. But the PDF request would still go through an HTTP handler, so I'd like to know if I should create a specific HTTP handler to intercept requests for PDFs, or if i should do this at the IIS level...however I dont necessarily want to avoid caching ALL PDF's on that site.

Any suggestions? Thanks in advance for the help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

东走西顾 2024-12-24 15:28:59

如果您的 pdf 文档链接附加了唯一的查询字符串,我相信这会阻止缓存。以刻度为单位的时间是一个很好的选择,例如:

string.Format("{0}?t={1}", pdfFileUrl, DateTime.Now.Ticks);

If your link to the pdf document had a unique querystring appended I believe that would prevent caching. Time in ticks is a good one to use, eg:

string.Format("{0}?t={1}", pdfFileUrl, DateTime.Now.Ticks);
抱着落日 2024-12-24 15:28:59

我刚刚遇到了类似的问题。我的页面允许用户输入数据并生成新的 pdf 文件并单击“保存”。新的 pdf 文件将覆盖旧的。在 IE8 中,当用户单击“保存”后的 pdf 链接时,将始终显示旧的 pdf(用户需要清除缓存才能显示新的 pdf)。
经过几个小时的搜索,我发现在 IIS6 中,转到“输出缓存”,添加文件扩展名“.aspx”的新缓存规则,勾选“用户模式缓存”和“内核模式缓存”,然后在两个选项下,选择“阻止所有缓存”。这对我有用!

I just had a similar issue. I have my page allows users to input data and generate new a pdf file Save clicked. The new pdf file overwrites the old one. In IE8, when user click the pdf link after the Save, the old pdf will always showed (user need to clear the cache to display the new one).
After hours of searching, I found that in IIS6, go to 'Output Caching', add a new cache rule with file extension '.aspx', tick both 'User-mode caching' and 'Kernel-mode caching' then under both options, select 'Prevent all caching'. This is working for me!

江南月 2024-12-24 15:28:59

清除临时互联网文件为您提供新版本的事实表明浏览器是缓存的来源。您可以关闭 iis 缓存,但这不会阻止代理缓存文档。如果您需要 100% 确定用户看到的是最新版本,我建议使用查询字符串值来导致 url 不同。查询字符串可以是 pdf 生成时间戳。

The fact the clearing your temporary internet files gave you the new version shows the browser is the source of the cache. You could turn iis caching off but that wouldn't stop proxies caching the document. If you need to be 100% sure that the user sees that latest version, I suggest using a query string value to cause the url to be different. The query string could be the pdf generation timestamp.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文