3

在 PHP 中,默认情况下不发送与缓存相关的标头。

HTTP/1.1 200 OK
Date: Fri, 19 Nov 2010 11:02:16 GMT
Server: Apache/2.2.15 (Win32) PHP/5.2.9-2
X-Powered-By: PHP/5.2.9-2
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 26
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

现在,由于默认情况下它没有说任何关于缓存的内容,它会导致说 example.com/index.php 在某些情况下被缓存吗?

4

3 回答 3

4

是的,如果服务器端没有设置规则,通常浏览器会默认缓存某些文件(通常是图像和 css)(请参阅浏览器缓存)。

您可以设置缓存控制标头来控制它,或者使用以下方法完全禁用它:

header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache");

请参阅标题中的示例 #2并阅读下面的注释。

于 2010-11-19T11:34:44.107 回答
4

是的。一般来说,除非有一些限制,否则每个成功的响应都可能被缓存

除非受到缓存控制(第 14.9 节)指令的特别限制,否则缓存系统可以始终将成功的响应(参见第 13.8 节)存储为缓存条目,如果它是新鲜的,可以不经验证就返回它,并且可以在成功验证后返回它.

于 2010-11-19T11:52:21.640 回答
1

它会导致 example.com/index.php 在某些情况下被缓存吗?

它不应该,但是那里有很多实现(特别是在移动设备/移动代理上)在这方面表现不正确。

还有很多关于缓存的坏信息——“Pragma: no-cache”从服务器发送时毫无意义。

防止缓存:

header("Cache-Control: no-store, no-cache, must-revalidate"); 

当一切都失败时 -检查手册

于 2010-11-19T11:45:10.373 回答