美文网首页
浅聊 HTTP Cache

浅聊 HTTP Cache

作者: 耀得嘛 | 来源:发表于2019-03-29 11:12 被阅读0次

概述

所谓的 HTTP Cache 机制,其实是服务端和客户端之间的一套约定,需要依靠客户端和服务端程序来具体实现。

现代浏览器以及一些高抽象层次对服务端 web 框架一定程度上实现了对这套约定的支持。但是,当我们使用一些较底层的 http 工具来收发请求时,这些工具通常不包含这些逻辑,需要人工合理实现。

大致流程

  • 客户端首次向服务端请求某个数据,没有任何缓存可用,因此服务端总是会发回所请求的数据
  • 服务端通过 Response 中的相关 Header,指导客户端对内容进行缓存
  • 当客户端再次请求该数据时,会首先对本地缓存版本进行检查
    • 如果缓存没有过期,则直接使用本地缓存的版本
    • 如果缓存已经过期,则会对缓存进行重新校验
      • 客户端会将缓存的指纹发送到服务端,请求服务端对数据进行校验
      • 如果匹配成功,则表示当前数据并没有更新,服务端不会重发数据,客户端为本地缓存续期并继续使用
      • 如果匹配失败,则表示当前数据已经更新了,服务端发送新数据给客户端,客户端弃用旧缓存,并缓存新数据

技术细节

服务端主要通过 Response 中的 Cache-Control Header 来指导客户端对数据进行缓存。

例如,如果服务端希望客户端将数据缓存一天,则可以设置 Cache-Control: max-age: 86400。注意 max-age 的参数是秒。额外地,服务端还会附带一个 ETag Header,携带该数据的指纹。

如果客户端发现本地缓存过期后,向服务端再次请求数据时,会带上 If-None-Match Header,其值为这份数据的指纹,即服务端传回数据时携带的 ETag,以便于服务端对数据进行校验。

在客户端缓存的有效期内,数据请求会直接读取本地缓存,而不会真实地向服务端进行发送。如果客户端要强制更新一波本地缓存,则可以带上 Cache-Control: no-cache Header,告诉服务端,不看缓存了,直接进入校验环节吧。

以上例子只是列举了一些常规用法。还有一些参数如 no-store, smaxage, must-reinvalidate 等,可以帮助实现更精细化的控制,就不在这里展开了。

最后,感谢并推荐希望更进一步的读者阅读以下参考链接。

参考

相关文章

  • 浅聊 HTTP Cache

    概述 所谓的 HTTP Cache 机制,其实是服务端和客户端之间的一套约定,需要依靠客户端和服务端程序来具体实现...

  • 浅聊 Cache-Control 之 no-store vs n

    相关文章 浅聊 HTTP Cache 背景 Web 标准中,在没有设置 cache-control 的情况下,是倾...

  • http cache

  • HTTP cache

    cache是一种存储给定资源,当下次有请求时用副本代替重新从服务器拉取源数据的一种技术。一般只有GET请求的资源才...

  • HTTP Cache

    HTTP Cache Last-Modified 服务器为了通知浏览器当前文件的版本,会发送一个上次修改时间的标签...

  • http: cache

    http: 缓存 http/1.0 Pragma:它用于向后兼容HTTP / 1.0缓存,其中Cache-Cont...

  • HTTP Cache

    本文为web开发系列的一部分。 HTTP协议的Cache机制 HTTP协议提供Cache机制,当相应数据没有变化时...

  • HTTP Cache

    缓存是一个很大的话题,毕竟缓存作为一种性能优化的常规手段,在许多地方都有应用到。本文主要讨论web领域下浏览器与代...

  • 缓存相关

    Expires和Cache-Control Expires: Http1.0Cache-Control: Http...

  • HTTP 缓存策略

    引用自:[ HTTP 缓存策略](http://foofish.net/blog/95/http-cache-po...

网友评论

      本文标题:浅聊 HTTP Cache

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