zoukankan      html  css  js  c++  java
  • 前端缓存机制

    1、缓存的作用

    1)加快资源加载速度,提高用户体验

    2)节省带宽,服务器端资源无需重新传输;甚至一些缓存无需进行http请求

    3)服务器端缓存,如CDN,可以减缓多用户并行请求的压力,减轻服务器压力

    2、缓存分类:服务器端缓存(CDN),客户端缓存(浏览器缓存)

    3、浏览器缓存机制

    1)强缓存:本地进行缓存过期时间的比较。若时间没有过期,则直接才从本地获取缓存的资源,无需向服务器端发起请求。

    2)协商缓存:发送http请求,请求头中包含一些协商缓存的字段,与服务器端进行比较,倘若资源没修改,则服务器端返回304状态码,客户端则可以直接从缓存中获取资源,反之则服务器端发送该资源数据。

    4.强缓存

    1)Expires:浏览器第一次发起请求,服务器端返回资源时带有一个Expires字段,该字段由服务器端计算所得,表示缓存过期的时间期限。

    具体判断是否过期:

    Expires < 当前客户端时间
    

    该缓存有个弊端:Expires的时间是由服务器端计算所得,计算依据为服务器端第一次请求时间,而当前判断缓存时,与客户端时间做比较,倘若两端的时间不同呢?所以还是不够可靠。

    2)Cache-Control:第一次发起请求,资源会存储当前时间,并且保存一个max-age。

    具体判断是否过期:

    第一次请求的客户端时间 + max-age < 当前客户端时间

    max-age为第一次请求的时候服务器端发送的过期时间间隔,而两次比较都是客户端时间,因此可以解决Expires不准确的缺点。

    注:Cache-Control的优先级比Expires高

    4、协商缓存

    1)Last-Modified , If-Modified-Since

    Last-Modified:浏览器端发送请求时,服务器端返回Last-Modified告诉浏览器资源最后修改的时间,浏览器则把该时间存储到资源中。

    If-Modified-Since:当强缓存的资源过期时,若资源中有Last-Modified字段,则浏览器将Last-Modified的时间赋值给If-Modified-Since,浏览器发起请求,将If-modified-Since字段包含在请求Header中,服务器端获得该字段,将其与服务器端对应资源最后的修改时间进行对比,倘若服务器端时间较旧,则返回304,不包含消息体;反之则正常请求。

    确定:只能精确到秒级,在秒级内的操作无法精确; 若资源定期生成,但内容不变,此时Last-Modified会发生改变,则无法进行缓存了。

    2)Etag,If-None-Match

    该缓存方法的原理与Last-Modified相同;区别:Etag的值默认由服务器端中对文件的索引(INode)、大小(Size)和最后修改时间(MTime)进行Hash后生成。

    注:Etag的优先级高于Last-Modified

    Http请求过程:判断强缓存中资源是否过期,若过期,进行Etag,若Etag不存在,则进行Last-Modified,若Last-Modified不存在,则直接请求;

  • 相关阅读:
    Delphi SQL语句字符串拼接
    DELPHI的MEMO组件
    学习 SQL 语句
    Windows7系统目录迁移:Users,Progr…
    Delphi中Sender对象的知识
    Delphi处理事件函数中的Sender: TObject代表什么?
    (sender as TButton).some 和 TButton(sender).some 的区别是什么?
    什么情况下需要检测预装Win8/8.1电脑内置激活密钥(即Win8/8.1 OEM key)?
    用SQL语句查找包含有某个关键字的存储过程、触发器、函数等等
    DELPHI 解决DBGrid SHIFT键多选问题
  • 原文地址:https://www.cnblogs.com/Yoriluo/p/7513358.html
Copyright © 2011-2022 走看看