• 【WEB HTTP】缓存


    1. HTTP并不支持兄弟缓存,所以人们通过一些协议对HTTP进行了扩展,比如因特网缓存协议(Internet Cache Protocol, ICP)和超文本缓存协议(HyperText Caching Protocol, HTCP)。

    2.  缓存的处理步骤

    • 接收;
    • 解析;
    • 查找,专业级的缓存会使用快速算法来确定本地缓存中是否有某个对象。
    • 新鲜度检测,http有一组非常复杂的新鲜度检测规则,缓存产品支持的大量配置选项。Http有一些简单的机制可以在不要求服务器记住有哪些缓存拥有其文档副本的情况下,保持已缓存数据与服务器数据之间充分一直。HTTP将这些简单的机制称为文档过期(document expiration)和服务器再验证(server revalidation)
    1. 文档过期:http首部 cache-Control:max-age = 23s(指定一个相对的日期,HTTP/1.1)和Expires(指定一个绝对的日期,HTTP/1.0+)。 
    2. 服务器再验证:仅仅是已缓存文档过期了并不意味着他和原始服务器上目前处于活跃状态的文档有实际的区别;这只是意味着到了要进行核对的时间了。这种情况被称为“服务器再验证”,说明缓存需要询问原始服务器文档是否发生了变化。用条件方法进行再验证:HTTP允许缓存想原始服务器发送一个“条件 GET”,请求服务器只有在文档和缓存中现有的副本不相同时,才回送对象主体。通过这种方法,将新鲜度检测和对象获取结合成了单个条件GET。 HTTP定义了5个提哦啊及那请求首部。对缓存再验证来说最有用的两个首部是If-Modified-Since和If-None-Match(其他首部包括, if-Unmodified-Since, If-Range, If-Match)。说有条件首部都以If-开头。缓存验证器(cache validater)
      • If-Modified-Since+date.
      • If-None-Match,实体标签再验证。有些情况下仅适用最后修改日期进行再验证是不够的。HTTP允许用户对被称为实体标签(ETag)的“版本标识符”进行比较。实体标签是附加在文档上的任意标签(引用字符串)。If-None-Match+version information。 
      • 强弱验证器(HTTP/1.1支持弱验证器)。弱验证器允许对一些内容做出了修改。但内容的主要含义发生变化时,通常他还是会发生变化。用”W/“来标示弱验证器。
    • 创建响应;
    • 发送;
    • 日志。

    3. 控制缓存的能力

    服务器可以通过HTTP定义的几种方式来指定在文档过期之前可以将其缓存多长时间。按照优先级递减的顺序,服务器可以首部到响应中去。

    • no-Store与no-Cache响应首部(eg. Cache-Control:no-Store; Cache-Control:no-Cache),标示no-Store的响应会禁止响应对缓存进行复制。缓存通常会像缓存代理服务器一样,向客户端转发一条no-store响应,然后删除对象。标识为no-Cache的响应实际上是可以存储在本地缓存区中的。只是在与原始服务器进行再验证之前,缓存不能够提供给客户端使用。HTTP/1.1中提供Pragma:no-Cache首部是为了兼容HTTP/1.0+。HTTP/1.1应该用Cache-Control:no-Cache。
    • max-age响应首部(Cache-Control:max-age)
    • expires响应首部(Cache-Control:Expires),指定的是实际的过期日期。
    • must-revalidate
    • 试探性过期
  • 相关阅读:
    Python学习心得第二周-作业
    Python学习心得第二周-02 字符串、列表、元组、字典
    Python学习心得第二周-01 数字类型
    eclipse 性能调优之内存分配
    Spring 面试
    技巧 linux 如何显示一个文件的某几行(中间几行)
    命令 scp
    机器学习遇到的好的资料
    maven 使用记录
    “冷启动”问题浅析
  • 原文地址:https://www.cnblogs.com/hongdanning/p/4597555.html
Copyright © 2020-2023  润新知