要想实现这个功能,需要先了解以下这些概念。
1 http-equiv 属性
http-equiv 属性用于设置 HTTP 响应头,它一般配合 content 属性一起使用, content 属性用于设置响应头的值。
2 Cache-Control 响应头
网页的缓存是由 HTTP 消息头中的 “Cache-Control” 来控制的。这是 HTTP/1.1 协议新定义的控制缓存的消息头。缓存指令是单向的,也就是说,在请求中设置的指令,不会被包含在响应中。在微信中打开的页面,本质也是网页,所以也可以通过 HTTP 消息头来控制。
Cache-Control 值 | 说明 |
---|---|
public | 所有内容都将被客户端与代理服务器缓存。 |
private | 内容只缓存到私有缓存中,即客户端可以缓存。此为默认值。 |
no-cache | 如果存在合适的验证令牌 (ETag),客户端会先与服务器确认返回的响应是否被更改,如果未被更改,则不会继续请求。 |
no-store | 所有内容都不会被缓存。 |
must-revalidation/proxy-revalidation | 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证。 |
max-age=xxx | 缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用。如果和 Last-Modified 一起使用时, 优先级较高。 |
注意: Cache-Control 会覆盖 Expires 和 Last-Modified。 而且,由于不同浏览器对 Cache-Control 处理行为基本相同,所以这个属性是处理跨浏览器缓存问题的最有效的方法。
3 Pragma 响应头
Pragma 是 HTTP/1.0 所定义的头部,主要用来向后兼容只支持 HTTP/1.0 协议的缓存服务器,它只有一个 no-cache 值。
<meta http-equiv="Pragma" content="no-cache" />
与以下 Cache-Control 写法,效果相同:
<meta http-equiv="Cache-Control" content="no-cache"/>
4 Expires 响应头
Expires 响应头可设置缓存过期的时间点, 在此时间点之后,缓存过期。
<meta http-equiv="Expires" content="0" />
如果在 Cache-Control 响应头设置了 “max-age” 或者 “s-max-age” 指令,那么这个 Expires 头会被忽略。
综上所述,通过以下设置,就可以实现不清理微信缓存,看到实时更新的页面:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />