- 强制缓存 当缓存数据库中已有所请求的数据时,客户端直接从数据库读取数据。当缓存数据库中没有所请求的数据时,客户端才会从服务端获取
-
协商缓存 客户端会先从缓存数据库中获取到一个缓存数据的标识,得到标识后请求服务端验证标识是否失效,如果没有失效服务端会返回304,此时客户端再从缓存中读取数据,如果失效,服务端会返回跟新的数据。
-
强制缓存服务器响应的header中会用两个字段来表明-Expires和Cach-Control。
- Expires的值为服务器数据到期时间,由于服务端的时间和客户端的时间有误差会导致缓存命中的误差。
- Cache-Control
- private:客户端可以缓存
- public 客户端和代理服务器都可以缓存
- max-age=t:缓存内容在t秒后失效
- no-cache:需要使用协商缓存(服务器)来验证缓存数据
- no-store:所有数据都不会缓存
-
协商缓存是只需要对比是否可以进行缓存,浏览器第一次请求数据时,服务器会将缓存标识与数据一起响应给客户端,当浏览器再次请求时,客户端先将缓存标志发送给服务器,服务器根据此标识进行判断,若未失效返回304,流浪器可以使用缓存数据。接下了解下缓存标识
- Last-Modified : 服务器在响应请求时,会告诉浏览器资源的最后修改时间。
- if-Modified-Since: 浏览器再次请求数据时,会将请求头包含次字段,后面跟着在缓存中获得的最后修改时间。服务器发现有此字段时,和请求资源的最后修改时间进行比对。
- 如果真被修改了那么开始响应一个整体,服务器返回:200 OK
- 如果没有被修改只响应header,服务器返回304 NotModified
- if-Unmodified-Since:从某个时间点算起,文件是否没有被修改
- 如果没有被修改:则开始继续传输文件,服务器返回200
- 如果文件被修改:则不传输,服务器返回:412 Precondition Faild(预处理错误)
- Etag HTTP1.1推出的。服务器响应时,通过次字段告诉浏览器当前资源在服务器生成的唯一标识
- If-None-Match:再次请求服务器时,浏览器的请求报文头部会包含此字段,后面的值为在缓存中获取的标识。服务器接收到次报文后发现If-None-Match则与被请求资源的唯一标识进行对比。
- 不同,说明资源被改动过,则响应整个资源内容,返回状态码200
- 相同,说明资源无心修改,则响应header,浏览器直接从缓存中获取数据信息。返回状态码304
- If-None-Match:再次请求服务器时,浏览器的请求报文头部会包含此字段,后面的值为在缓存中获取的标识。服务器接收到次报文后发现If-None-Match则与被请求资源的唯一标识进行对比。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 轻松学会HTTP缓存(强缓存,协商缓存)
- 常见面试题之缓存雪崩、缓存穿透、缓存击穿
- HTTP缓存 - 强缓存/协商缓存/浏览器刷新
- mybatis教程--查询缓存(一级缓存二级缓存和整合ehcache)
- 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
- 缓存穿透和缓存击穿处理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
如何构建敏捷项目管理团队
丽萨·阿金斯 / 徐蓓蓓、白云峰、刘江华 / 电子工业出版社 / 2012-6 / 49.00元
《敏捷项目管理系列丛书•PMI-ACPSM考试指定教材•如何构建敏捷项目管理团队:ScrumMaster、敏捷教练与项目经理的实用指南》结合作者的亲身经历告诉读者如何建立一个高性能的敏捷项目管理团队,以及最终成为一名优秀的敏捷教练。作者将敏捷教练定义为导师、协助者、老师、问题解决者、冲突领航员、协作指挥者,正是这种不同角色之间的细微区别才使敏捷教练的工作富有深度。《敏捷项目管理系列丛书•PMI-A......一起来看看 《如何构建敏捷项目管理团队》 这本书的介绍吧!