0
点赞
收藏
分享

微信扫一扫

温故而知新篇十一

刘员外__ 2022-03-22 阅读 57

HTTP缓存

前言

在这里插入图片描述

HTTP缓存

强制缓存

在这里插入图片描述

  • 强缓存-Cache-Control

在这里插入图片描述

  • Expires

协商缓存

在这里插入图片描述

  • Etag/If-None-Match

a). 当浏览器请求服务器的某项资源(A)时,服务器会根据A算出一个哈希值,并通过Etag返回给浏览器,浏览器把ETAG和资源A同时缓存到本地。

b). 当下次向服务器请求该资源时,会通过If-None-Match把ETAG发送给服务器。

c). 服务器再次计算A的哈希值并和浏览器的返回值作比较,如果A发生了变化就把A返回给浏览器(返回值200),如果未发生变化就返回浏览器304(未修改)
在这里插入图片描述

  • Last-Modified/If-Modified-Since

a). 在浏览器请求服务器的某项资源时,返回资源的同时还有一个Last-Modified的属性标记此文件在服务器端的最后修改时间;

b). 浏览器第二次访问该资源时,会向服务器传送 If-Modified-Since报头,询问该时间之后文件是否被修改过;

c). 如果服务器的资源没有变化,则时间一致,返回304的状态吗,浏览器使用本地缓存;

d). 如果时间不一致,返回200,显示新文件并缓存。
在这里插入图片描述

  • Etag是标识传输,Last-Modified是时间传输;
  • Etag的优先级高于Last-Modified;
  • Last-Modified标注的最后修改时间只能精确到秒,如果文件在1秒以内被多次修改,它不能准确标注 文件的最后修改时间;
  • 如果文件定期生成,但内容没有任何变化,但是Last-Modified却改变了,导致没法使用缓存;
  • 有可能存在服务器没有准确获取文件修改时间,或与代理服务器时间不一致的情况;
  • Etag每次服务端生成都需要进行读写操作,而Last-Modified只需要读取操作,Etag消耗更大些;

在这里插入图片描述

对比

在这里插入图片描述

优缺点

  • 减少了冗余的数据传输;
  • 缓解了服务器的压力, 大大提高了网站的性能;
  • 加快了客户端加载网页的速度;
  • 缓存中的数据可能与服务器的数据不一致;
  • 消耗内存;
举报

相关推荐

0 条评论