我有一个网页,我正在缓存12个小时。这是响应标题的两个屏幕截图。
和
你可以看到'日期'和'到期'标头的值已更改。我的理解是' Date'是我们要求提交档案的时间和“到期日期”。是浏览器应该检查更新版本的时间。在四分钟的间隔后,两个值都已更新。那么,浏览器如何确定何时需要更新版本的文件?它会不会导致文件无限期缓存?
我理解'过期'值只是浏览器的建议。但是浏览器如何知道第一次请求文件的时间因为'日期'标题也会每次都更新。
我还有一个问题。我的网页有.php
分机。但是,我的标题显示:
Content Type : "text/html"
为什么会这样? Content Type : "text/html"
导致我的网页被缓存。具有session_start()
的网页上不会发生缓存?是因为session_start()
还是仅仅是巧合?
答案 0 :(得分:1)
HTTP'Date'标题只是服务器上的当前日期和时间。有关详细信息,请参阅RFC。它与所服务的资源(文件/页面)没有任何关系
HTTP'Expires'标题是对浏览器的建议,通常是在您的Web服务器配置中设置或直接在应用程序代码中设置。在大多数情况下,它是当前时间+网站管理员认为合理的额外时间/天。因此,如果过期设置为3天 - “过期”将始终显示“日期”字段中的当前时间,并且“过期”字段中的当前时间+ 3天。文件更新时无关紧要,没有效果。
如果您的浏览器在缓存中包含此文件且原始“过期”时刻尚未到来 - 浏览器将使用缓存版本。有一些方法可以强制更新。
答案 1 :(得分:0)
仅回答第二部分。
Php页面动态创建html页面然后发送给客户端。对客户来说它只是html。
答案 2 :(得分:0)
Date和Expires标头来自服务器。如果提供的资源具有明确的日期(例如,它是磁盘上的实际文件,或者是设置Date标头的脚本),则服务器将使用该日期。否则,服务器将使用当前日期。
如果您上传新文件,浏览器通常不会再次从服务器请求资源,而浏览器的文件缓存仍然有效。如果用户清除缓存或强制刷新,则浏览器将查询服务器并接收更新的内容。
请注意,缓存过期标头是建议性的。浏览器可以随时重新请求任何资源。 (但出于性能原因,浏览器通常会尽可能地缓存任何内容和所有内容。)
默认情况下,PHP提供的任何页面都有Content-type: text/html
。这个是正常的。当然,PHP代码可以将其更改为其他任何内容,这通常在PHP提供非html内容的任何时候完成。
任何使用会话的页面通常都不会被缓存。这也很正常。这样做的原因通常是页面内容取决于会话数据(例如,当前登录的用户),并且缓存是不合需要的。
对于您更新的问题:发生了什么,您正在强制重新加载网页(从服务器)。因此,当它发生时,服务器将提供更新的信息。当您告诉浏览器重新加载(而不是仅仅转到页面)时,您明确告诉它忽略缓存并重新请求资源。这就是为什么你的日期和过期标题似乎向前迈进。