浅聊 HTTP Cache

2019-03-29  本文已影响0人  耀得嘛

概述

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

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

大致流程

技术细节

服务端主要通过 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 等,可以帮助实现更精细化的控制,就不在这里展开了。

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

参考

上一篇 下一篇

猜你喜欢

热点阅读