jQuery Mobile 应用强制浏览器忽略缓存页面

Posted

技术标签:

【中文标题】jQuery Mobile 应用强制浏览器忽略缓存页面【英文标题】:jQuery Mobile app force browser to ignore cached pages 【发布时间】:2020-11-14 14:38:37 【问题描述】:

我编写了一个 jQuery Mobile 应用程序,每天有超过 200 人大量使用它,但我遇到了以下问题。每次我更改应用程序中的某些内容(html、CCS 或 js)时,用户仍在使用旧版本。就像他们的移动浏览器没有检测到文件已更改...他们必须清除浏览器缓存才能获得最新版本。 有没有办法让我强制浏览器忽略缓存版本并重新下载当前版本???

【问题讨论】:

这能回答你的问题吗? How do we control web page caching, across all browsers? deblocker - 感谢您的回答。是的,至少它为我指明了正确的方向......我现在正在测试它 - 可能 web.config 是使用单页 HTML5/jQuery 移动应用程序执行此操作的最佳方式 - 我尝试将它直接添加到元标记,但它直截了当地说 - 它不适用于 html5... 【参考方案1】:

在 IIS (7+) 下:

快捷方式:

在 IIS 管理器中,选择您的网站,双击 HTTP 响应标头,然后选择操作 Set Common Headers

这将打开对话框窗口设置通用 HTTP 响应标头

如果您选中使网页内容过期并选择立即,这会将Cache-Control: no-cache发送到浏览器以获取所有文件。

微调:

Download 并安装 IIS 的 URL 重写扩展。这将添加 URL 重写 功能。

添加一个新的空白规则并设置如下:

Name: ResponseNoCache (or whatever You like)
Match: Server Variable
Variable Name: RESPONSE_CACHE_CONTROL
Variable value: Matches the pattern 
Using: Wildcards 
Pattern: *

Action type: Rewrite
Value: no-cache, no-store, must-revalidate

现在,为了获得更多粒度,您可以设置前置条件

点击Precondition,选择Create New Precondition...

例如,我可以按文件扩展名过滤:

Name: NoCacheRequestFiles (or whatever You like)
Using: Regular Expressions

点击Add..按钮,Add Condition对话框窗口将会打开。

Condition input: REQUEST_FILENAME 
Check if input string: Matches the pattern
Pattern: \.html|\.js|\.css

之后,您需要点击Apply操作并重新启动 IIS。

web.config 然后看起来像这样:

<rewrite>
  <outboundRules>
    <rule name="ResponseNoCache" preCondition="NoCacheRequestFiles" patternSyntax="Wildcard">
      <match serverVariable="RESPONSE_CACHE_CONTROL" pattern="*" />
      <action type="Rewrite" value="no-cache, no-store, must-revalidate" />
    </rule>
    <preConditions>
      <preCondition name="NoCacheRequestFiles">
        <add input="REQUEST_FILENAME" pattern="\.html|\.js|\.css" />
      </preCondition>
    </preConditions>
  </outboundRules>
</rewrite>

现在,您可以在 Chrome 开发者工具(或任何您喜欢的工具)中检查 IIS 是否有效地发送了 Cache-Control: no-cache, no-store, must-revalidate 响应标头。


附加信息:

我也在使用静态和动态压缩。因此,我注意到 IIS 正在缓存 g 压缩文件,具体取决于两个附加参数:

frequentHitThreshold frequentHitTimePeriod

我没有进一步研究压缩内容和缓存控制标头之间的交互,因为整体是一个相当频繁变化的complex topic 和hotfixes。但是,如果此解决方案也适用于移动设备浏览器,那么很高兴听到您的反馈。

【讨论】:

以上是关于jQuery Mobile 应用强制浏览器忽略缓存页面的主要内容,如果未能解决你的问题,请参考以下文章

changePage 后 jQuery Mobile 刷新页面

从 iPhone 主屏幕重新打开时,如何在 jQuery Mobile 应用程序上缓存并保留上次访问的页面?

预取和缓存动态创建的 jquery Mobile+PhoneGap 页面

iPhone Mobile Safari:强制键盘打开

jQuery Mobile mailto - 取消邮件留在邮件应用程序中

jquery mobile JS与缓存的问题