http缓存机制

    xiaoxiao2024-11-30  294

    http缓存机制的作用:当设置了http缓存后可以减少http请求并减少网络中的数据传输 ,从而提升web性能与用户体验。

    http缓存有两种缓存策略:

    强制缓存协商缓存

    使用强制缓存策略请求数据的过程

    Created with Raphaël 2.2.0 client发送请求 是否命中本地缓存? 本地缓存是否过期? browser向server发送请求 browser更新缓存 返回缓存数据 yes no yes no

    使用协商(对比)缓存策略请求数据的过程

    Created with Raphaël 2.2.0 client发送请求 browser从本地缓存中获得缓存标识 browser询问server对应标识的缓存是否失效 server对比缓存,判断是否失效 server返回新数据和缓存策略 browser更新缓存 server返回缓存未失效的信息 browser从缓存中获得数据 yes no

    强制缓存

    强制缓存: 在缓存数据未失效的情况下,可以直接使用缓存数据,缓存失效后才向服务器发起请求,收到响应的数据后更新缓存

    相关的响应头字段

    Expires: 服务端返回的到期时间。即下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据。Expires是HTTP 1.0中的字段,其时间是由服务端生成的,但是客户端时间可能跟服务端时间有误差,这就会导致缓存命中的误差。现在默认浏览器均默认使用HTTP 1.1,使用Cache-Control替代。

    Cache-Control: 常见的取值有private、public、no-cache、max-age,no-store,默认为private。

    valueintroprivate客户端可以缓存public客户端和代理服务器都可缓存max-age=x缓存的内容将在x秒后失效no-cache需要使用对比缓存来验证缓存数据no-store所有内容都不会缓存,强制缓存,对比缓存都不会触发

    例如谷歌浏览器访问csdn首页的一张图片的响应头中的cache-control信息

    cache-control: max-age=31104000

    协商缓存

    协商缓存: 需要进行比较判断是否可以使用缓存。浏览器第一次请求数据时,服务器会将缓存标识与数据一起返回给客户端,客户端将二者备份至缓存数据库中。再次请求数据时,客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据。

    缓存生效时,状态码为304,并且报文大小和请求时间大大减少。原因:服务端在进行标识比较后,只返回header部分,通过状态码通知客户端使用缓存,不再需要将报文主体部分返回给客户端。

    缓存标识是协商缓存中的核心

    Last-Modified:服务器在响应请求时,告诉浏览器资源的最后修改时间。

    If-Modified-Since:再次请求服务器时,通过此字段通知服务器上次请求时,服务器返回的资源最后修改时间。服务器收到请求后发现请求头有If-Modified-Since字段,则与被请求资源的最后修改时间进行比对。

    资源的最后修改时间 > If-Modified-Since,表明资源又被改动过,则响应整片资源内容,返回状态码200;若资源的最后修改时间 <= If-Modified-Since,表明资源无新修改,则响应HTTP 304,告知浏览器继续使用所保存的cache。

    Etag和If-None-Match,其优先级高于Last-Modified和If-Modified-Since

    Etag:服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。

    If-None-Match:再次请求服务器时,通过此字段通知服务器客户段缓存数据的唯一标识。

    服务器收到请求后发现有头If-None-Match则与被请求资源的唯一标识进行比对

    不同,说明资源又被改动过,则响应整片资源内容,返回状态码200;相同,说明资源无新修改,则响应HTTP 304,浏览器继续使用所保存的cache。
    最新回复(0)