V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jokcy
V2EX  ›  程序员

谁能给个充分的理由为什么不用 querystring 方式来管理浏览器缓存?

  •  
  •   jokcy · 2015-05-20 19:47:12 +08:00 · 3127 次点击
    这是一个创建于 3486 天前的主题,其中的信息可能已经有所发展或是发生改变。

    知乎看到一篇文章提到前端工程化的概念,里面讲到了如何设置浏览器缓存以及如何更新浏览器缓存的问题。

    似乎大家一致得到的结论就是使用修改文件名的方式而不喜欢使用带“?ver=XXX”的querystring的方式,但并没有说明理由。

    唯一在讨论中看到一条貌似是一些代理设置或者一些中间服务商会忽略querystring的方式,带来意想不到的结果。

    于是想跟大家讨论一下,这事为啥?

    11 条回复    2015-05-21 09:25:28 +08:00
    Vonex
        1
    Vonex  
       2015-05-20 19:49:29 +08:00
    设置Cache Header
    jokcy
        2
    jokcy  
    OP
       2015-05-20 19:50:28 +08:00
    @Vonex 设置Cache Header是制造缓存,如何更新缓存呢
    loading
        3
    loading  
       2015-05-20 19:50:56 +08:00 via Android
    用过cdn?
    jokcy
        4
    jokcy  
    OP
       2015-05-20 19:51:27 +08:00
    @loading 能详解么,我用过,没自己建过cdn
    kikyous
        5
    kikyous  
       2015-05-20 19:55:10 +08:00   ❤️ 2
    querystring 的方式会覆盖旧的静态文件,这样在多服务器部署的网站会出现问题
    jokcy
        6
    jokcy  
    OP
       2015-05-20 19:59:41 +08:00
    @kikyous 哦~这倒是,那对于单服务器的形式,会有区别么?
    loading
        7
    loading  
       2015-05-20 20:05:42 +08:00 via Android
    @jokcy 如果你用了cdn或多服务器,就会出现部分文件更新而另一个没更新,然后就跪了。
    jokcy
        8
    jokcy  
    OP
       2015-05-20 20:11:07 +08:00
    @loading 哦,所以还是多服务器的问题咯,除了这一点还有别的优劣么?
    gihnius
        9
    gihnius  
       2015-05-20 21:39:41 +08:00
    带版本的文件名比 query string 高效些吧。现在流行 filename-{md5}.ext 形式或用其它 salt.

    query string 一般被认为是动态内容。比如 squid 默认就这样: http://wiki.squid-cache.org/ConfigExamples/DynamicContent
    sodatea
        10
    sodatea  
       2015-05-20 23:26:28 +08:00
    jokcy
        11
    jokcy  
    OP
       2015-05-21 09:25:28 +08:00
    @sodatea 这个已经看过了的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5999 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:11 · PVG 10:11 · LAX 18:11 · JFK 21:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.