慢慢网站建设网站开发发展趋势2018
news/
2025/10/5 1:30:41/
文章来源:
慢慢网站建设,网站开发发展趋势2018,站长工具seo综合查询访问,旅游类网站设计方案为什么要有浏览器缓存#xff1f;
浏览器缓存(Brower Caching)是浏览器对之前请求过的文件进行缓存#xff0c;以便下一次访问时重复使用#xff0c;节省带宽#xff0c;提高访问速度#xff0c;降低服务器压力
http缓存机制主要在http响应头中设定#xff0c;响应头中…为什么要有浏览器缓存
浏览器缓存(Brower Caching)是浏览器对之前请求过的文件进行缓存以便下一次访问时重复使用节省带宽提高访问速度降低服务器压力
http缓存机制主要在http响应头中设定响应头中相关字段为Expires、Cache-Control、Last-Modified、Etag。
浏览器缓存从无到有再到利用缓存的流程
浏览器首次请求缓存从无到有缓存文件可能不一定是从web服务器请求来的也可能是从CDN来的但总而言之第一次一定是请求来的 浏览器对同样的资源发起二次请求针对不同资源类型比如JS文件等等服务器进行判断 部分静态资源文件可以判断缓存时长如果未过期就可以从本地读取
浏览器缓存类型
- 强缓存
浏览器不会向服务器发送任何请求直接从本地缓存中读取文件并返回 Status Code: 200 OK 从内存读取因为速度快于硬盘所以最优先由内存读取 从硬盘读取如果内存中没有就会从硬盘中读取 如果以上两个地方都没有对应的缓存资源才会去服务器寻找对应的缓存资源。 补充一下在强缓存中普通刷新会忽略它但不会清除它需要强制刷新。浏览器强制刷新时请求会带上Cache-Control:no-cache和Pragma:no-cache这样就会让浏览器对资源进行重新请求。而普通刷新的情况下部分资源文件比如js、图片不会带上no-cache属性也就是会到服务器进行协商请注意这里属性携带的位置均位于请求头而响应头是否设置则取决于浏览器 - 协商缓存
所谓协商缓存简单说就是先看看本地缓存过期没有没过期直接用过期了去服务器看看本地这个缓存还能不能用能用就接着用返回304状态码。不能用就请求最新的返回200状态码。
协商缓存HTTP Code : 304 服务器会根据这个请求的request header的一些参数来判断是否命中协商缓存如果命中则返回304状态码并带上新的response header通知浏览器从缓存中读取资源 协商缓存HTTP Code : 200 浏览器首次请求本地没有缓存可用。去服务器请求缓存得到200的响应 浏览器针对协商缓存判断流程 比如Get请求JS文件请求头中会加入属性Last-Modified/If-Modified-Since或者ETag/If-None-Match
Last-Modifed/If-Modified-Since和Etag/If-None-Match是分别成对出现的呈一一对应关系
之所以会有这两种属性是因为前者是HTTP 1.0版本的后者是HTTP 1.1版本出现的
这两个都是用来判断文件是否需要更新的时间戳或者hash值服务器收到请求后根据这两个属性进行判断如果请求的文件没有更新那么就返回HTTP304的状态码让浏览器直接用缓存Disk or Menmory)。而是否追加这个属性由浏览器自行判断 但一般像是Ajax的Get、Post类似这种的XHR等如果浏览器后端利用代码明确设置了Cache-Controlno-cache的选项则不会缓存数据到了服务端就重新请求数据
也就是no-cache的情况下必须到服务器进行check当服务器返回304的时候才允许使用浏览器缓存否则必须请求新数据 注意ETag的优先级是优于 Last-ModifiedIf-Modified-Since如果校验Header是ETagIf-None-Match的情况下就会优先验证ETag的Hash值
如何选择合适的缓存
大致的顺序
Cache-Control —— 请求服务器之前Expires —— 请求服务器之前If-None-Match (Etag) —— 请求服务器If-Modified-Since (Last-Modified) —— 请求服务器 协商缓存需要配合强缓存使用如果不启用强缓存的话协商缓存根本没有意义
大部分web服务器都默认开启协商缓存而且是同时启用【Last-ModifiedIf-Modified-Since】和【ETag、If-None-Match】
但是下面的场景需要注意
分布式系统里多台机器间文件的Last-Modified必须保持一致以免负载均衡到不同机器导致比对失败分布式系统尽量关闭掉ETag(每台机器生成的ETag都会不一样
CDN缓存参考https://blog.csdn.net/Runnymmede/article/details/138315636 参考文章1https://juejin.cn/post/6844904153043435533 参考文章2https://juejin.cn/post/6844903838768431118 参考文章3https://github.com/amandakelake/blog/issues/41 参考文章4https://segmentfault.com/a/1190000008956069
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927767.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!