【问题标题】:Forcing a webpage to expire using Javascript使用 Javascript 强制网页过期
【发布时间】:2014-03-21 14:39:00
【问题描述】:

在经典的 ASP 中,我告诉浏览器将某个页面缓存一个小时:

response.expires = 60

这很棒,因为用户在一小时内的后续页面加载是即时的,并且无需查询后端数据库。

该页面允许用户使用 Javascript 对页面进行更改。这些更改很少发生,但是当它们发生时,我希望该缓存页面过期,以便在下次访问该页面时加载该页面的新副本,而不是没有用户更改的缓存版本。

在 Javascript 中有没有办法告诉浏览器当前页面已经过期,并从缓存中清除它?或者,在 ASP 中有没有办法告诉浏览器刷新缓存页面,即使它还没有过期?

【问题讨论】:

  • 您可以使用虚拟查询字符串调用页面,例如mypage.asp?new=123,这将强制浏览器下载新副本
  • @YuriyGalanter 问题是应用程序中的所有页面都引用了没有参数的缓存页面,所以我会缓存一个带有参数的新副本,但不会刷新主页。

标签: javascript asp-classic browser-cache


【解决方案1】:

这是迄今为止我发现的最佳解决方法。

对页面进行更改后,我使用 AJAX 向缓存页面发送了一个 POST 请求。在 POST 中,我放置了一个带有当前时间戳的 cache 参数。在缓存页面的顶部,我检查了cache 参数,并立即退出以避免加载整个页面。

通过 POST 到页面,该页面的缓存被清除。但是,这是对服务器的附加请求,因此可能会有更好的答案。它在 Internet Explorer 11 中也不起作用,因此我禁用了 IE 浏览器的缓存。

if (request.form("cache") <> "") then
    response.end
end if

' check for IE '

Dim Regex, match
Set Regex = New RegExp
With Regex
    .Pattern = "(MSIE|Trident)"
    .IgnoreCase = True
    .Global = True
End With
match = Regex.test(Request.ServerVariables("HTTP_USER_AGENT"))
If match then
    ' no cache, :( '
else
    response.expires = 60
end if

在我的最终实现中,我现在不是在 POST 请求中传递一个愚蠢的时间戳,而是发送设置更改信息。通过将设置更改保存为缓存清除 POST 请求的一部分,我能够避免执行两个单独的请求(一个用于保存更改,一个用于清除缓存)。我仍然可以看到cache 参数方法的案例,但就我而言,所有一个请求都非常适合我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多