AngularJS单页应用中,ng-view跳转时是否重校验index.html的IIS缓存?
AngularJS路由跳转时,浏览器会不会检查index.html的缓存?
答案很明确:不会。
咱们来拆解一下为什么是这个结果:
- AngularJS的
ng-view和$routeProvider实现的是客户端路由。简单说,当你打开index.html后,整个AngularJS应用就被加载到浏览器内存里了。之后点击内部链接跳转,都是应用自己在客户端切换视图——只是替换页面里的部分内容,根本不会触发浏览器重新请求index.html文件。 - IIS设置的
Cache-Control Max-age是用来控制浏览器何时需要重新请求index.html的,但这个检查只有在浏览器需要重新加载整个页面的时候才会触发:比如用户手动刷新页面、直接在地址栏输入网站URL、从外部网站的链接跳进来。内部的路由跳转完全是前端自主处理,和服务器没有交互,自然不会去检查index.html的缓存状态。
如果你的场景里需要确保用户能拿到最新的index.html(比如应用更新后),通常的做法是给index.html设置更严格的缓存策略,比如Cache-Control: no-cache(让浏览器每次都验证缓存有效性),或者配合版本号机制,在部署时修改index.html中引用资源的文件名(比如把app.js改成app.v2.js),这样旧缓存的index.html会加载旧资源,但新用户或刷新后的用户会拿到带新资源引用的index.html。
内容的提问来源于stack exchange,提问作者ScottR
相关产品推荐
相关产品推荐

