php Web中的数据缓存机制是什么?

doinxwow  于 2023-03-07  发布在  PHP
关注(0)|答案(5)|浏览(99)

我曾经认为缓存是浏览器驱动的,浏览器不会再次请求同一个文件,如果他们认为数据是重复的,但在网上阅读一些文本,我意识到这是网站,告诉浏览器哪些文件不应该请求两次。
有谁能澄清一下吗?

c3frrgcw

c3frrgcw1#

是的,它由HTTP的Cache-ControlExpires头控制。
第一个基本上告诉客户该高速缓存策略,第二个基本上告诉客户端缓存策略的到期时间(即,在获得新响应和/或丢弃缓存的响应之前,坚持缓存策略多长时间)。
Web服务器通常会发送一组默认的头文件。您可以在服务器配置中永久设置/覆盖这些头文件,也可以在PHP中使用header()函数根据请求设置/覆盖这些头文件。以下示例指示客户端永远不要缓存响应。

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

Pragma报头用于确保与旧HTTP 1.0客户端的兼容性,旧HTTP 1.0客户端还不支持Cache-Control(在HTTP 1.1中引入)。
如果该高速缓存已过期,并且高速缓存的响应还包含Last-Modified和/或ETag标头,则客户机可以触发具有If-Modified-Since和/或If-None-Match的条件GET请求。只要If-Modified-Since和/或If-None-Match条件为正,则服务器将发回不包含任何内容的304“未修改”响应。如果发生这种情况,则允许客户端将当前高速缓存的内容保持该高速缓存中并更新报头。

ilmyapht

ilmyapht2#

如果满足If-Modified-Since/If-Unmodified-Since HTTP请求头中给定的条件,则可以使用它们来请求页面。
浏览器可以使用ETag响应头来判断页面中的数据是否已更改。这些标记可以通过HEAD请求来检索。
服务器可以使用ExpiresCache-ControlPragma响应头让浏览器知道何时应该尝试获取页面的新副本,而不是使用缓存。

cotxawn7

cotxawn73#

缓存控制站点的一些方法....
通过设置HTTP头(CGI脚本等)进行编程
通过标签()
网络服务器配置文件(httpd.conf,web.config)
这将取决于Web服务器类型,例如Apache、伊萨等。
良好资源:http://en.wikipedia.org/wiki/Web_cache

dgenwo3n

dgenwo3n4#

如果你想获得比HTTP所允许的更大的控制权,你可以使用manifest.cache,这是一个浏览器获取的文件,其中包含一个资源列表--如果文件没有被修改,浏览器根本不会重新请求它。
参见:www.example.comhttp://diveintohtml5.ep.io/offline.html#manifest
虽然这是所有"现代"的Web浏览器都支持的,但如果浏览器不支持它,它将照常工作(即完全依赖于您的HTTP头,其他人在他们的回答中已经描述过)。

rt4zxlrg

rt4zxlrg5#

这可能有助于理解至少在internet explorer中是如何处理缓存的。
Caching Improvements in Internet Explorer 9

相关问题