首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确保动态生成的javascript文件永远不会被缓存?

如何确保动态生成的javascript文件永远不会被缓存?
EN

Stack Overflow用户
提问于 2010-07-17 18:27:27
回答 6查看 1.3K关注 0票数 2

我有一个动态生成的javascript文件,我想确保它永远不会被浏览器缓存。我目前的方法是在每个页面视图的script标签中简单地附加一个(新的) guid到url。

例如:

代码语言:javascript
运行
复制
<script type="text/javascript" src="/js/dynamic.js?rand=979F861A-C487-4AA8-8BD6-84E7988BD460"></script>

我的问题is...is这是实现我目标的最好方法吗?

作为参考,我使用的是ASP.NET MVC2,javascript文件是作为控制器操作的结果生成的。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-17 18:30:27

你的方法运行得很好,另一种方法是使用DateTime.UtcNow.Ticks。当然,您也可以使用cache control headers,但如果您想绝对确定,您所使用的方法就是最佳选择。

但是,如果您无论如何都是动态生成文件,并且需要将其包含在page...any中,那么为什么不只是将JavaScript粘贴到页面中呢?由于您希望它永远不缓存,这将为客户端节省一次往返。

票数 6
EN

Stack Overflow用户

发布于 2010-07-17 18:34:20

您可以创建自定义操作属性:

代码语言:javascript
运行
复制
public class NoCacheAttribute : ActionFilterAttribute
{  
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var cache = filterContext.HttpContext.Response.Cache;
        cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        cache.SetValidUntilExpires(false);
        cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        cache.SetCacheability(HttpCacheability.NoCache);
        cache.SetNoStore();
        base.OnResultExecuting(filterContext);
    }
}

然后用这个属性修饰生成javascript的控制器操作:

代码语言:javascript
运行
复制
[NoCache]
public ActionResult MyAction()
{
    ...
}

在这种情况下,您不再需要附加的随机字符串。

票数 2
EN

Stack Overflow用户

发布于 2010-07-17 18:31:05

是的那很好。我个人也是这样做的,但我使用的是时间戳,这确保了它始终是唯一的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3271098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档