JavaWeb(2)浏览器缓存机制简单理解

在我们浏览一个页面发现异常情况时,通常考虑的是不是浏览器做了缓存,所以一般的做法就是按Ctrl+F5组合键来重新请求一次,这样重新请求的页面就是最新的页面。

为什么?首先,在浏览器端,如果按Ctrl+F5来刷新页面,那么浏览器会直接向目标的URL发送请求,而不是去使用浏览器的缓存数据。其次,即使请求发送到服务器,也有可能访问到的时缓存的数据(比如:在应用服务器的前端部署一个缓存服务器,像Varnish代理,那么Varnish也可能直接使用缓存的数据)。所以,为了保证用户看到最新的数据,必须通过HTTP来控制。

当我们使用Ctrl+F5来刷新一个页面时,在Http的请求头中会增加一些请求头,从而让服务器知道我们需要获取的时最新的数据,而不是缓存的数据。

增加的请求头到底是什么呢?

Pragma:no-cache

Cache-Control:no-cache

为什么增加这两个请求头信息之后,页面就会获取最新的数据?这两个配置项有什么作用呢?

Pragma/Cache-Control:用于指定所有的缓存机制在整个请求/响应链中必须服从的指令,如果知道了该页面是否是缓存的,不但可以控制浏览器,还可以控制和HTTP相关的缓存或代理服务器。

配置项的可选值:

Public:所有内容都将被缓存,在响应头中设置;

Private:内容只缓存到私有的缓存中,在响应头中设置;

no-cache:所有内容都不会被缓存,在请求头和响应头中设置;

no-store:所有内容都不会被缓存到缓存或者Internet的临时文件中,在响应头中设置;

must-revalidation/proxy-revalidation:如果缓存的内容失效,请求必须发送到服务器/代理中以进行重新的验证,在请求头中设置;

max-age=xxx:缓存的内容将在xxx秒后失效,这个选项只在HTTP1.1中可用,和Last-modified一起使用时,优先级较高,在响应头中设置。

Pragma:no-cache和Cache-Control:no-cache的作用时一样的。

需要注意的是,Cache-Control优先级比较高,在和其他的一些请求字段(如Expires)同时出现时,Cache-Control会覆盖其他字段。

你可能感兴趣的:(JavaWeb(2)浏览器缓存机制简单理解)