V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xilixjd
V2EX  ›  问与答

为什么服务器上静态资源更新了,不清除缓存的情况下浏览器再次访问还在请求旧的静态资源?

  •  
  •   xilixjd · 2017-04-11 13:55:34 +08:00 · 9012 次点击
    这是一个创建于 2786 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 webpack 打包后,文件被分成了一个入口 html 文件和许多 js 文件

    然后再上传到服务器上

    这个时候再访问网站,浏览器仍然在请求原来的静态 js 文件导致 404 错误,且这个静态文件的来源是 from cache

    比如未更新前的静态资源名称 post.chunk.a9059143.js

    更新后的静态资源名称 post.chunk.1c9dff52.js

    浏览器访问更新后的静态资源仍然是未更新前的 js 文件,导致 404 错误

    如果清除缓存或者进入 chrome 的访客模式,网站能够正常访问

    19 条回复    2017-04-11 23:07:03 +08:00
    Showfom
        1
    Showfom  
       2017-04-11 14:29:25 +08:00
    ctrl + F5 强制刷新
    gamexg
        2
    gamexg  
       2017-04-11 14:35:31 +08:00
    你的入口 html 被缓存了。
    检查 nginx 等配置,是不是设置了缓存时间。
    xilixjd
        3
    xilixjd  
    OP
       2017-04-11 14:35:55 +08:00
    @Showfom 不强制刷新有办法解决吗,难道一个网站每次更新完还要用户强刷一下?
    gimp
        4
    gimp  
       2017-04-11 14:37:00 +08:00
    缓存有失效时间的
    Showfom
        5
    Showfom  
       2017-04-11 14:37:59 +08:00
    @xilixjd 换浏览器哈哈

    你看下你设置缓存多久啊
    vipwpcom
        6
    vipwpcom  
       2017-04-11 14:45:54 +08:00
    可以加上版本号
    learnshare
        7
    learnshare  
       2017-04-11 14:50:03 +08:00
    index.html 设置缓存时间,尽量短比较好
    xilixjd
        8
    xilixjd  
    OP
       2017-04-11 14:59:06 +08:00
    @learnshare 问一下怎么设置,在 nginx 上设置还是 html 文件?
    xilixjd
        9
    xilixjd  
    OP
       2017-04-11 14:59:31 +08:00
    @Showfom 没有设置缓存。。不知道怎么设置
    misaka19000
        10
    misaka19000  
       2017-04-11 15:00:59 +08:00 via Android
    @xilixjd 谷歌“ Nginx 缓存失效时间就可以了”
    Showfom
        11
    Showfom  
       2017-04-11 15:06:57 +08:00
    @xilixjd 没设置那就是浏览器默认的缓存,不用在意,等你用户访问的时候,早失效了。
    think2011
        12
    think2011  
       2017-04-11 15:07:56 +08:00
    @Showfom 这是要让每个用户换浏览器吗... Orz

    楼主的入口文件( index.html )被缓存了,当然请求的也是旧的了,只要保证每次发布 index.html 都是新的,那么问题就解决了。
    think2011
        13
    think2011  
       2017-04-11 15:09:00 +08:00
    我倒是困惑单页面应用,如果用户正在浏览,这时更新发布了,应该怎么处理..
    nfroot
        14
    nfroot  
       2017-04-11 15:24:15 +08:00
    @think2011 asp.net 据说会会话失效,然后哈哈哈哈重新登录(反正我们供应商是这样说的,然后父框架页面如果这时候刷新,直接丢你一个 500 错误)
    msg7086
        15
    msg7086  
       2017-04-11 15:47:53 +08:00
    难道你打包程序会没事删掉旧的资源文件?
    icegreen
        16
    icegreen  
       2017-04-11 16:32:23 +08:00
    @think2011 更新的时候加面包屑, 旧的资源还保留, 在最新的 index.html 里面引入最新的资源文件;
    think2011
        17
    think2011  
       2017-04-11 19:39:59 +08:00
    @icegreen 有没有相关文章,这个问题困惑我很久了。
    loading
        18
    loading  
       2017-04-11 19:41:54 +08:00 via Android
    html 被缓存了
    RE
        19
    RE  
       2017-04-11 23:07:03 +08:00 via iPhone
    旧版本的 js 不要立马删掉啊… 要么就不要在文件名中带入版本号,直接替换旧的… 或者 html 请求的时候用 build.js?v=123 来控制版本
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3428 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 11:34 · PVG 19:34 · LAX 03:34 · JFK 06:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.