数据缓存

最后更新于:2022-04-01 22:46:04

## 数据缓存 大部分接口应该在响应头中携带 `Last-Modified`, `ETag`, `Vary`, `Date` 信息,客户端可以在随后请求这些资源的时候,在请求头中使用 `If-Modified-Since`, `If-None-Match` 等请求头来确认资源是否经过修改。 如果资源没有进行过修改,那么就可以响应 `304 Not Modified` 并且不在响应实体中返回任何内容。 ~~~ $ curl -i http://api.example.com/#{RESOURCE_URI} HTTP/1.1 200 OK Cache-Control: public, max-age=60 Date: Thu, 05 Jul 2012 15:31:30 GMT Vary: Accept, Authorization ETag: "644b5b0155e6404a9cc4bd9d8b1ae730" Last-Modified: Thu, 05 Jul 2012 15:31:30 GMT Content ~~~ ~~~ $ curl -i http://api.example.com/#{RESOURCE_URI} -H "If-Modified-Since: Thu, 05 Jul 2012 15:31:30 GMT" HTTP/1.1 304 Not Modified Cache-Control: public, max-age=60 Date: Thu, 05 Jul 2012 15:31:45 GMT Vary: Accept, Authorization Last-Modified: Thu, 05 Jul 2012 15:31:30 GMT ~~~ ~~~ $ curl -i http://api.example.com/#{RESOURCE_URI} -H 'If-None-Match: "644b5b0155e6404a9cc4bd9d8b1ae730"' HTTP/1.1 304 Not Modified Cache-Control: public, max-age=60 Date: Thu, 05 Jul 2012 15:31:55 GMT Vary: Accept, Authorization ETag: "644b5b0155e6404a9cc4bd9d8b1ae730" Last-Modified: Thu, 05 Jul 2012 15:31:30 GMT ~~~ 相关资料: * [RFC 7232](http://tools.ietf.org/html/rfc7232) * [HTTP 缓存 - Google Developers](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=zh-cn) * [RFC 2616 中缓存过期时间的算法](http://tools.ietf.org/html/rfc2616#section-13.2.3), [MDN 版](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ), [中文版](http://blog.csdn.net/woxueliuyun/article/details/41077671) * [HTTP 协议中 Vary 的一些研究](https://www.imququ.com/post/vary-header-in-http.html) * [Cache Control 與 ETag](https://blog.othree.net/log/2012/12/22/cache-control-and-etag/)
';