IIS / AngularJS单页应用程序-在应用程序中导航时如何防止单个index.html的页面缓存

Posted

技术标签:

【中文标题】IIS / AngularJS单页应用程序-在应用程序中导航时如何防止单个index.html的页面缓存【英文标题】:IIS / AngularJS Single Page Application - How do I prevent page caching of a single index.html when navigating in app 【发布时间】:2017-05-15 04:37:03 【问题描述】:

我需要让我的应用程序 (SPA) 不跨页面导航操作缓存 index.html

我的应用有缓存破坏,但它仅在我更新(重新加载)index.html 时才有效。

如何在我的应用中导航时强制应用不缓存 index.html,并在每次页面导航点击或操作时重新加载 index.html?

这是我现有的 sn-p index.html 代码:

<!DOCTYPE html>
<html lang="en" manifest="sw.appcache">
  <head>
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />

sw.appcache 文件内容

CACHE MANIFEST
NETWORK:
*

编辑:

在我的 index.html 中添加以下脚本标记会强制页面在每次 url 更改时重新加载。

 window.onhashchange = function() 
        var parts = window.location.href.split("#");
        window.location.href = window.location.protocol + "//" + window.location.host + "?t=" + (new Date()).getTime() + "#" + parts[1];

      

【问题讨论】:

如果您在每次导航更改时都强制重新加载页面,那么您不妨只使用常规 Web 应用程序而不是使用 SPA。 【参考方案1】:

我在 php 中的经验是,无论您使用什么花哨的标头,您都无法控制浏览器是否决定缓存您的页面。

最好的方法是使用请求参数来操作 URL。

而不是http://example.com/mypage.html 使用:http://example.com/mypage.html?timestamp

时间戳在运行时动态生成,可以是随机数或您希望的任何动态唯一字符串。

这也是防止浏览器缓存CSS、JS、图片等的好办法

【讨论】:

感谢您的快速回复,该应用程序完全是我的角度代码,因此我认为我无法在请求中注入时间戳。我也在使用路由来访问页面。 @Vahe 没问题。如果你真的需要,Angular 或任何其他 JS 都可以使用 window.redirect。另一种选择是动态加载资源(相同的技巧),而不是担心将整个页面作为新请求加载。祝你在编码丛林中好运!

以上是关于IIS / AngularJS单页应用程序-在应用程序中导航时如何防止单个index.html的页面缓存的主要内容,如果未能解决你的问题,请参考以下文章

[Angularjs]asp.net mvc+angularjs+web api单页应用

Angular单页应用&AngularJS内部实现原理

如何为单页 AngularJS 应用程序实现基本的 Spring 安全性(会话管理)

使用 AngularJS 和 Spring Security 的单页应用程序中需要 AntMatchers

AngularJS:在单页​​应用程序中使用身份验证的基本示例

利用AngularJS实现一个单页应用