【问题标题】:How to prevent browser from saving webpage in cache, or force to request new page each time? [closed]如何防止浏览器将网页保存在缓存中,或者每次都强制请求新页面? [关闭]
【发布时间】:2012-02-27 07:28:09
【问题描述】:

这是否可以通过添加 HTML 代码来完成,以便在每次页面加载时从服务器而不是缓存中请求页面?

【问题讨论】:

  • 您所说的“用户”到底是什么意思 - 您是指浏览器的自动缓存机制,还是用户主动将页面保存在他们的机器上?
  • “我无法访问服务器”是什么意思?你的页面不是从服务器加载的吗?
  • m 使用其他站点的服务器

标签: javascript jquery html


【解决方案1】:

唯一可行的选择是永远不要使用相同的 URL 两次,这是通过添加具有随机值的虚假请求参数来完成的。

大多数客户端 AJAX 框架都这样做。

【讨论】:

【解决方案2】:

您可以使用这些元标记:

<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">

将此添加到页面的&lt;head&gt; 部分

More info on meta tags here

【讨论】:

  • (请注意,并非所有浏览器都支持。服务器端标头是唯一完全可靠的方式。)
  • @bobince 没有 HTML 元方法可以做到这一点?
  • 根据 W3C 学校,所有主流浏览器都支持它:w3schools.com/tags/att_meta_http_equiv.asp
  • http-equiv="content-type" 适用于所有浏览器,但其他标头不一定。许多标头必须在 HTML 解析开始之前进行处理,这将阻止 meta 影响它们。 content-type 是特殊情况,是的,它重新利用最初打算成为服务器端处理指令的方式有点误导和丑陋。 (这就是为什么 HTML5 鼓励使用 &lt;meta charset="utf-8"&gt; 来代替......虽然我会暂时坚持使用 http-equiv,因为旧浏览器提供了更好的支持。)
【解决方案3】:

为避免缓存,您可以将时间戳作为参数附加

var timestamp = new Date().getTime() 
  //append it to an url when you make an ajax call or to a link

 var myLink = document.getElementByID('yourlink');
 myLink.href = myLink.href + '&nocache='+timestamp;

【讨论】:

    【解决方案4】:

    在 head 部分,您可以添加 no-cache 指令。当 Cache-Control: no-cache 设置时,浏览器会向服务器发送 http 请求,并在释放缓存副本之前进行验证。

    <meta http-equiv="Pragma" content="no-cache">
    

    您使用 Expires 指令并将时间设置为请求时间之前的值,这将使浏览器为每个后续请求请求服务器。 ma​​x-age 指令也与 Expires 类似,可用于此目的。

    <meta http-equiv="Expires" content=-10>
    

    看这里:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Avoiding_caching

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2012-06-19
      • 1970-01-01
      • 2010-11-15
      • 2012-05-22
      • 2010-10-25
      相关资源
      最近更新 更多