浏览器如何决定何时再次请求缓存文件?

时间:2016-01-11 04:06:52

标签: php html performance caching server

我有一个网页,我正在缓存12个小时。这是响应标题的两个屏幕截图。

enter image description here

enter image description here

你可以看到'日期'和'到期'标头的值已更改。我的理解是' Date'是我们要求提交档案的时间和“到期日期”。是浏览器应该检查更新版本的时间。在四分钟的间隔后,两个值都已更新。那么,浏览器如何确定何时需要更新版本的文件?它会不会导致文件无限期缓存?

我理解'过期'值只是浏览器的建议。但是浏览器如何知道第一次请求文件的时间因为'日期'标题也会每次都更新。

我还有一个问题。我的网页有.php分机。但是,我的标题显示:

Content Type : "text/html"

为什么会这样? Content Type : "text/html"导致我的网页被缓存。具有session_start()的网页上不会发生缓存?是因为session_start()还是仅仅是巧合?

3 个答案:

答案 0 :(得分:1)

  1. HTTP'Date'标题只是服务器上的当前日期和时间。有关详细信息,请参阅RFC。它与所服务的资源(文件/页面)没有任何关系

  2. HTTP'Expires'标题是对浏览器的建议,通常是在您的Web服务器配置中设置或直接在应用程序代码中设置。在大多数情况下,它是当前时间+网站管理员认为合理的额外时间/天。因此,如果过期设置为3天 - “过期”将始终显示“日期”字段中的当前时间,并且“过期”字段中的当前时间+ 3天。文件更新时无关紧要,没有效果。

  3. 如果您的浏览器在缓存中包含此文件且原始“过期”时刻尚未到来 - 浏览器将使用缓存版本。有一些方法可以强制更新。

    1. 如果您的PHP输出HTML(在许多情况下都是如此),'text / html'的内容类型是完全正确的。它可以是'application / json','image / png'以及适当时的任何其他内容。 PHP是编程语言,内容类型是指从HTTP服务器接收的数据格式,它可以是任何东西。

答案 1 :(得分:0)

仅回答第二部分。

Php页面动态创建html页面然后发送给客户端。对客户来说它只是html。

答案 2 :(得分:0)

Date和Expires标头来自服务器。如果提供的资源具有明确的日期(例如,它是磁盘上的实际文件,或者是设置Date标头的脚本),则服务器将使用该日期。否则,服务器将使用当前日期。

如果您上传新文件,浏览器通常不会再次从服务器请求资源,而浏览器的文件缓存仍然有效。如果用户清除缓存或强制刷新,则浏览器将查询服务器并接收更新的内容。

请注意,缓存过期标头是建议性的。浏览器可以随时重新请求任何资源。 (但出于性能原因,浏览器通常会尽可能地缓存任何内容和所有内容。)


默认情况下,PHP提供的任何页面都有Content-type: text/html。这个是正常的。当然,PHP代码可以将其更改为其他任何内容,这通常在PHP提供非html内容的任何时候完成。


任何使用会话的页面通常都不会被缓存。这也很正常。这样做的原因通常是页面内容取决于会话数据(例如,当前登录的用户),并且缓存是不合需要的。


对于您更新的问题:发生了什么,您正在强制重新加载网页(从服务器)。因此,当它发生时,服务器将提供更新的信息。当您告诉浏览器重新加载(而不是仅仅转到页面)时,您明确告诉它忽略缓存并重新请求资源。这就是为什么你的日期和过期标题似乎向前迈进。