让我们说我必须为我的网站提供可以随时更新的动态内容。我想缓存数据以获得最佳性能。
我认为最准确的做法是只要数据没有改变就将数据保存在缓存中。所以它涉及使用no-cache
选项。
问题是我不知道这是不是一个好的选择。每当有人请求这些数据时,缓存服务器将请求源服务器并询问自那时以来数据是否已更改。所以我不知道no-store
选项的区别在于数据根本没有缓存(在性能方面)。我的意思是,我认为bandwitdh音量将以相同的方式使用(我是对的吗?)
因此,如果每次发出请求,我的缓存服务器必须检查源服务器,那么直接请求源服务器有什么不同?
是否有任何选项可以设置缓存,以便在只发生更新的情况下获取新数据?
答案 0 :(得分:0)
ETags是一种方法。如果您可以将合理的简短唯一字符串与动态内容相关联,那么您可以在HTTP响应标头中使用该标识符:
Cache-Control: public, must-revalidate, max-age=60
ETag: <content identifer>
内容标识符更改内容更改非常重要,因此例如使用内容的十六进制编码哈希将起作用。然后,客户端将通过在GET请求中发送In-None-Match标头来使用ETag:
If-None-Match: <previous etag>
如果内容的ETag未更改,服务器应发送304 Not Modified响应,或者发送带有更新内容的完整200 OK响应,否则发送新的ETag。
支持服务器上If-Modified-Since标头的另一个选项。此标头允许客户端仅在自指定日期以来已修改内容时才请求内容,否则服务器应返回304 Not Modified响应且不包含内容。