美文网首页web前端
本地缓存与协商缓存

本地缓存与协商缓存

作者: 姜治宇 | 来源:发表于2020-04-26 11:40 被阅读0次

    浏览器缓存分为三种情况:
    1、200 from cache
    本地缓存,浏览器直接从本地缓存的内容获取响应,根本没向服务器发送请求。
    2、304 not modified
    协商缓存,浏览器在本地没有命中的情况下,在请求头中发送一定的校验数据给服务端,如果服务端数据没有改变,返回304,告诉浏览器从本地缓存响应即可。
    304返回的只是一些基本的响应头信息,数据量比较小,没有响应实体部分。
    3、200 ok
    如果以上两种缓存策略全都失败,那服务器只能返回完整响应。因为没有用到缓存,所以这种情况响应是最慢的。
    下面详细说一下本地缓存与协商缓存。

    本地缓存

    本地缓存就是把内容保存在本地,用的时候直接拿出来用,不用再去服务器请求了。
    本地缓存主要有以下几个响应头:
    1)pragma
    这个字段比较老了,是1.0时代的遗留产物。
    如果该字段设置为no-cache时,就是告知浏览器禁用本地缓存,每次都向服务器发送请求。
    2)expires
    这个字段表示过期时间,对应的值是一个具体的时间点,如果还没到这个时间点,则表明缓存还有效,不需向服务器发送请求。
    它也是一个老字段,是1.0的产物。
    3)cache-control
    这个头比较关键,应该重点掌握。
    cache-control的值常用的有如下几个:
    cache-control:no-store
    禁止浏览器缓存响应。
    cache-control:no-cache
    不允许直接使用本地缓存,需发起请求和服务器协商。
    注意,这个很容易让人产生误解,使人误以为是响应不被缓存。实际上,cache-control: no-cache是会被缓存的,只不过每次都需要向服务器发送请求验证。
    cache-control:max-age=3600
    浏览器本地缓存有效的最长时间,以秒为单位。
    前两个字段虽然是老字段,不过确实还在沿用,他们的优先级是:
    pragma > cache-control > expires

    协商缓存

    协商缓存就是需要跟服务器做一次交互,协商一下缓存策略。
    相关的请求头有如下几个:
    1)if-modified-since
    我们把请求头的last-modified字段,通过if-modified-since提交给服务器检查,如果修改时间是一致的,那就是没有修改,返回304。
    2)etag
    这是http1.1的字段,表示文件指纹标识符,如果文件内容被修改了,指纹信息会跟着变。
    注意,这个是响应头带过来的信息。
    3)if-none-match
    如果本地缓存策略失效,会将etag信息通过if-none-match发送给服务端,服务端会判断文件是否改变,如果没有改变,直接使用本地缓存,返回304。

    相关文章

      网友评论

        本文标题:本地缓存与协商缓存

        本文链接:https://www.haomeiwen.com/subject/gogkwhtx.html