Java教程

HTTP缓存

本文主要是介绍HTTP缓存,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  缓存是一种保存资源副本并在下次请求时直接使用该副本的技术,可以缓解服务器端压力,提升性能(获取资源的耗时更短了)。

 

1.强缓存(文档过期机制)

  

首部

描述

 

Cache-Control:max-age

Max-age值定义了文档的最大使用期——从第一次生成文档到文档不再新鲜为止的最大合法生存时间(以秒为单位)

例 Cache-Control:max-age = 484200

 

Expires

指定了一个绝对的过期日期。如果过期日期已经过了,说明文档不再新鲜。

例 Expires:Fir, 05 Jul 2002, 05:00:00 GMT

 

控制缓存策略:

1.no-store与no-cache

  这两个首部可以防止缓存提供未经证实的已缓存对象。

  • Cache-Control:no-store

    标识为no-store的请求或响应会禁止缓存对客户端请求或服务端响应进行复制,每次客户端发起请求都会向服务器端获取完整的响应内容。

  • Cache-Control:no-cache

    允许缓存但要进行再验证,每当有请求发出,缓存会将该请求发到服务器端,验证该请求所描述的内容在缓存中是否过期。若未过期,才允许缓存使用本地副本回复客户端。

2.private与public

  • Cache-Control:private(默认) —— 表示响应是专用于某个用户的,中间人不能缓存此响应,该响应只能应用于浏览器私有缓存中;
  • Cache-Control:public —— 表示响应是共享的,可以被任何客户端和代理服务器缓存;

3.must-revalidate

  实际上可以配置缓存,使其可以提供一些陈旧(过期)对象给客户端,以提升性能。但如果原始服务器希望缓存严格遵守过期信息,可以在原始响应中附加 Cache-Control:must-revalidate 首部。这样,缓存在没有事先与原始服务器进行再验证的情况下,不能提供这个对象的陈旧副本;若再验证过程中原始服务器不可用,则缓存会返回一条 504 Gateway Timeout错误。 

 

2.协商缓存(服务器再验证机制)

规则:

  • 如果再验证显示内容发生了变化,缓存会回去一份新的文档副本,并将其存储在旧文档的位置上,然后将文档发送给客户端;
  • 如果再验证显示内容没有发生变化,缓存只需要从服务器获取新的首部,包括一个新的过期日期,并对缓存中的首部进行更新。

 

 

 

首部

描述

 

If-Modified-Since:<date>  (弱校验器)

如果从指定日期之后文档被修改,就执行请求的方法(例如GET)来获取携带新首部的新文档。若没被修改则返回 304 Not Modified响应报文(携带新首部但不会返回文档)

 

 

If-None-Match:<tags> (强校验器)

针对那些被周期性重写但内容基本不变的文档,或者所做修改不重要的文档。服务器为文档提供特殊的标签(ETags),只要是上述情况,标签并不会改变。当已缓存标签与服务器标签不一致时才会执行请求的方法,否则仍返回304 Not Modified响应报文

 

 

3.Vary响应头 

  Vary响应头决定了对于后续的请求头,如何判断是请求一个新的资源还是使用缓存的文件。当缓存服务器收到一个请求,只有当前的请求和原始(缓存)的请求头跟缓存的响应头里的Vary都匹配,才能使用缓存的响应。

 

 

 

这篇关于HTTP缓存的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!