什么是网络中的数据缓存机制?

Shu*_*ham 2 php browser caching http

我以前认为缓存是浏览器驱动的,浏览器不会再次请求相同的文件,如果他们认为数据正在重复但是在网上阅读一些文本,我意识到网站告诉浏览器哪些文件不应该被请求两次.

任何人都可以澄清这个吗?

Bal*_*usC 7

那是对的.它由HTTP Cache-ControlExpires标头控制.

第一个基本上告诉客户端缓存策略.第二个基本上告诉客户端缓存策略的到期时间(即在获得新响应和/或丢弃缓存响应之前遵循缓存策略多长时间).

Web服务器通常会发送一组默认的标头.您可以使用header()函数在服务器配置中永久设置/覆盖这些标头,也可以基于请求.以下示例指示客户端永远不会缓存响应.

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
Run Code Online (Sandbox Code Playgroud)

所述Pragma报头是有保证与旧HTTP 1.0客户端不支持了兼容性Cache-Control,但(这是在HTTP 1.1中引入).

当缓存已过期且缓存的响应也包含Last-Modified和/或ETag标头时,客户端可以GET使用If-Modified-Since和/或触发条件请求If-None-Match.只要If-Modified-Since和/或If-None-Match条件是肯定的,服务器就会发送304"未修改"的响应而没有任何内容.如果发生这种情况,则允许客户端将当前缓存的内容保留在缓存中并更新标头.