我应该在提供文件时设置Cache-Control标头吗?或不?

时间:2010-03-05 19:49:33

标签: c# asp.net http-headers download

我正在通过asp.net中的HTTPModule提供一些文件。我想知道将Cache-Control标头设置或不设置为某些东西(如无缓存)是否有任何好处?

编辑:我对此感到好奇的原因是因为我们遇到了一个问题,即在IE中的SSL会话上提供office文档会导致错误(Cache Control设置为no) -cache)。也就是说,如果已将Cache-Control设置为no-cache,则无法在IE中通过SSL下载office文档。

基本上我不想包含Cache-Control标头,但想知道它是否会导致问题?

编辑2:好吧,Cache-Control标头已经用完了。我尝试了下面的建议,但遇到了一些问题。每当我添加一个过期标题或根本改变Cache-Control时,当我尝试打开Office 2007文档时,它会尝试将其作为zip打开。 (我知道它们真的是封装下的zip文件)但是当我不使用expires头文件或缓存控件时,IE就像Office文档一样打开它们。不幸的是,我没有时间尝试解决所有问题 - 因为代码冻结是从现在开始的十分钟:)

感谢大家的帮助!

4 个答案:

答案 0 :(得分:3)

雅虎表示和YSlow你应该。请参阅此article

更新:根据您的评论,您似乎正在尝试阻止缓存。我会用:

Cache-Control: max-age=0 

对我来说,它比使用Expires标题更简单,更明确。

更新2 :听起来您需要为office文档指定Content-Type标头。尝试使用以下内容:

Content-Type: application/octet-stream

答案 1 :(得分:1)

您可以尝试将Cache-Control标头设置为过去的日期/时间,而不是使用Expires

答案 2 :(得分:1)

这绝对是一个奇怪的问题......但这里的快速解决方案可能会阻止您的用户收到过时的内容:

如果在URL的末尾附加一个额外的querystring参数,以使每个Office文件请求都是唯一的,那么您可以在不在标题中设置缓存控制信息的情况下离开。

您当前的网址可能如下所示:

http://mysite.com/filegetter?name=document.doc

使用额外的“唯一”参数:

http://mysite.com/filegetter?name=document.doc&ts=

这将阻止浏览器为您的用户提供陈旧的office文件,并且该方法可以在客户端或服务器代码中实现。处理将文件发送回用户的模块只是忽略了使用户浏览器独有的URL部分。

答案 3 :(得分:0)