• HTTP权威协议笔记-7.缓存


    7.1 冗余的数据传输

      缓存的作用:当客户端每次访问服务器,服务器都会返回一份相同文件,一些相同的字节会不断的在网络内传输,这样冗余的数据传输会耗尽昂贵的带宽,降低传输速度,加重Web服务器的负载。

            有了缓存就可以保留第一条服务器发送的文件副本,后继请求就可以用缓存的副本文件响应,减少流入/流出服务器的数据,降低被浪费的流量。

    7.2 传输瓶颈

      7.2.1 带宽:带宽越宽,传输越快

      7.2.2 瞬间拥塞:突发事件,重要新闻会导致很多客户端访问同一个服务器,容易造成瞬间拥塞

      7.2.3 距离时延:距离消耗时间,距离越远,传输越慢

    7.3 命中和未命中

      缓存命中:缓存中已有的副本为某些请求提供服务,称为命中。

      缓存未命中:缓存中未有副本可对请求提供服务,而被转发至原始服务器,这称为未命中(下次该请求应该会是缓存命中)。

      再验证:原始服务器的内容可能发生变化,缓存要不时对其进行检查。

        

      Http提供了几个常用的对缓存进行检测验证的工具,常用的是:if-modifed-Since首部,将该首部添加到Get请求中,只有在缓存已有该副本,切服务器该文件已发生变化时,才会发送此对象。

    盗图:

    再验证:

      再验证命中:如果对象未修改,则反馈 304 Not Modified,缓存会将该副本记为有效,并将副本提供给客户端。

      再验证未命中:服务器文件与副本不相同,服务器向客户端发一条普通的带有完整内容的HTTP 200 OK。

      对象被删除:服务器返回 404 NOT found

    命中率:缓存命中率,有时也称为文档命中率,正常40%为合理。

        字节命中率:相对整个文档的每个字节的命中率。

    7.4 缓存的拓扑结构

      7.4.1 公有与私有

      缓存可以是单个用户专用,也可以是数千用户共享使用的

      专用的缓存被称为私有缓存。

      共享的缓存被称为公有缓存。

    盗图

      7.4.2 层次结构

      层次化结构缓存是很有意义的,在较小缓存未命中的情况下会转向父缓存继续查询命中,缓存级传递过多会造成响应时差大。

      网状缓存:网状缓存中的各缓存会以更加复杂的方式进行对话,做出动态的缓存通信决策,决定哪个父缓存进行对话,决定彻底绕开缓存,直接访问服务器等。这种代理缓存会决定选择何种路由进行访问、管理、传输,因此被称为内容路由器

      网状缓存完成了下列功能:

    • 根据URL在父缓存或者原始服务器之间进行动态选择。
    • 根据URL动态的选择一个特定的父级缓存。
    • 前往父级缓存之前,在本地缓存中搜索已缓存的副本。
    • 允许其他缓存对缓存部分进行访问,但不允许流量对其访问。

    7.5 缓存的处理步骤

    1. 接收 ——读取请求报文
    2. 解析 ——对报文进行解析,提取URL及首部
    3. 查询 ——查询本地是否有副本,如没有就从服务器获取一份并保存本地
    4. 新鲜度检测 ——查看缓存副本是否新鲜,如果不是则询问是否服务器有所更新。
    5. 创建响应 ——缓存会用新的首部和已缓存的主体创建一条响应报文
    6. 发送 ——将响应报文发送至客户端
    7. 日志 ——创建日志文件条目记录该次事件

      

  • 相关阅读:
    JSON操作技巧
    我的前端学习历程(转)
    sql指南网址
    using 和try/catch区别和注意点
    【转】StringBuffer的用法与string的区别
    【转】比较page、request、session、application的使用范围
    【转】StringBuilder用法
    【转】.Net高级技术——IDisposable
    【转】.NET快速查找某个类所在的命名空间
    【转】VS2010安装包制作
  • 原文地址:https://www.cnblogs.com/Khan-Sadas/p/6203638.html
Copyright © 2020-2023  润新知