pwindy  
在完成任务的同时,还需要不断“复盘”,不论你多么的忙,都需要留下时间思考,可以思考哪些地方做的好,哪些地方我们可以改进,应该如何改进,注重总结才是王道

HTTP的缓存行为分为:强制缓存和协商缓存。

 

1.Last-Modified和if-modified-since

last-modified是响应头上的属性,if-modifyed-since是请求头的数据。该属性值需要cache-control配合使用。当再次向服务器发送请求该资源时,会携带if-modified-since的请求头字段,到服务器比对和last-modified是否相同。如果相同则直接返回304,直接使用缓存,如果不相同,则再次请求新的数据,返回200。

2.ETag和if-None-Match

这俩个属性其实和last-modified和if-modified-since类似。不过Etag是服务器更加内容产生的hash字符串,并且Etag是响应头内容。if-None-match是请求头的内容。当再次向服务器发送请求某一个资源时,请求头会携带if-None-match属性,到达服务器后,和Etag进行比对。如果相同,则返回304,如果不相同则返回该资源,并且状态码为200。

3.请求头属性

if-modifyed-since、if-None-match

4.响应头属性

Last-modified、Etag

Expires、Cache-Control

5.浏览器获取缓存的流程图

6.无法被浏览器缓存的请求

  1. http信息头部cache-control: no-cache,pragma:nocache或者cache-control: max-age=0。
  2. 根据cookie,认证信息决定输入内容的信息是否可以被缓存。
  3. 经过https加密的请求。
  4. post请求无法被缓存
  5. 在http响应头中不存在last-modified/Etag和cache-control/expires

 7.用户行为与缓存的关系

用户在浏览器采用的一些操作,例如,返回上一阶段,下一阶段,刷新页面,强制刷新页面等操作,这些对于一些缓存的属性的影响是不一样的。下面讲进行详细解读:

1.刷新(仅仅是F5刷新)

此时对于cache-control/Expires是不生效的,但是last-modified/Etag都生效的,此时会向服务器发起请求,用来判断目标文件是否发生变化。

2.强制刷新(F5刷新+ctrl)

此时对于cache-control/Expires和last-modified/Etag都不生效,此时,必须从服务器拿到新数据。

3.回车或者转向

此时,所有的缓存都生效。

posted on 2022-08-11 16:29  pwindy  阅读(142)  评论(0)    收藏  举报