Php 浏览器如何决定何时再次请求缓存文件?
我有一个网页,我正在缓存12小时。这是响应标题的两个屏幕截图 及 正如您所看到的,“日期”和“到期”标题的值都已更改。我的理解是,“日期”是指我们请求文件的时间,“过期”是指浏览器应该检查更新版本的时间。间隔四分钟后,两个值都已更新。那个么,浏览器如何决定何时请求文件的更新版本呢?它不会导致文件无限期缓存吗 我知道“Expires”值只是对浏览器的建议。但浏览器如何知道文件第一次被请求的时间,因为“Date”头也会每次更新 我还有一个问题。我的网页有Php 浏览器如何决定何时再次请求缓存文件?,php,html,performance,caching,server,Php,Html,Performance,Caching,Server,我有一个网页,我正在缓存12小时。这是响应标题的两个屏幕截图 及 正如您所看到的,“日期”和“到期”标题的值都已更改。我的理解是,“日期”是指我们请求文件的时间,“过期”是指浏览器应该检查更新版本的时间。间隔四分钟后,两个值都已更新。那个么,浏览器如何决定何时请求文件的更新版本呢?它不会导致文件无限期缓存吗 我知道“Expires”值只是对浏览器的建议。但浏览器如何知道文件第一次被请求的时间,因为“Date”头也会每次更新 我还有一个问题。我的网页有.php扩展名。但是,我的标题显示: Co
.php
扩展名。但是,我的标题显示:
Content Type : "text/html"
为什么会这样<代码>内容类型:“text/html”导致缓存我的网页。缓存不会发生在具有
会话\u start()
的页面上?这是因为会话\u start()
还是只是巧合?仅回答第二部分
Php页面动态创建html页面,然后发送给客户端。对于客户端来说,它只是html
日期和过期标题来自服务器。如果所服务的资源具有明确的日期(例如,它是磁盘上的实际文件,或者它是设置日期头的脚本),则服务器将使用该日期。否则,服务器将使用当前日期 如果上载新文件,浏览器通常不会再次从服务器请求资源,而该文件的浏览器缓存仍然有效。如果用户清除缓存或强制刷新,则浏览器将查询服务器并接收更新的内容 请注意,缓存到期标头是建议性的。浏览器可以随时重新请求任何资源。(但出于性能原因,浏览器通常会尽可能长时间地缓存任何内容。)
默认情况下,PHP提供的任何页面都将具有
内容类型:text/html
。这是正常的。当然,PHP代码可以将其更改为任何其他内容,并且通常在PHP提供非html内容时都会这样做
任何使用会话的页面通常都不会被缓存。这也是正常的。这样做的原因是,通常情况下,页面内容取决于会话数据(例如,当前登录的用户),缓存是不可取的
对于您更新的问题:发生的情况是,您正在强制重新加载网页(从服务器)。因此,当它这样做时,服务器将向它提供更新的信息。当您告诉浏览器重新加载(而不仅仅是转到页面)时,您明确地告诉它忽略缓存并重新请求资源。这就是为什么您的日期和过期标题看起来是向前的。所以应用于
.html
的任何.htaccess
规则都适用于.php
文件?我不相信这种情况。他们收到的是html,但发送给处理.htaccess的服务器却不一样。如果你不想缓存页面,你可以发送相应的缓存控制
标题。如果文件没有缓存,日期和过期标题是否仍然来自服务器?@sanjeething实际上,服务器总是会发送一个日期。服务器是否发送Expires标头完全取决于配置。请您也回答我提到的第二部分,.php
没有session\u start()
的页面被缓存,而没有session\u start()的页面被缓存
不会被缓存。为什么会发生这种情况?如果浏览器不断更新日期标头,并且文件将在上次请求后12小时过期。这会导致文件无限期缓存吗?我遗漏了什么吗?更新了。此外,浏览器不设置日期标题。服务器提供日期和过期标题。只要服务器和客户端的时钟设置正确,您就不会意外地无限期缓存某些内容。如果浏览器将“Expires”字段设置为当前时间+3天,是否会导致文件无限期缓存。我错过什么了吗?当然不会!3天后,浏览器将下载新副本,如果文件已更新,浏览器将获得更新的文件。它与DNS中的TTL字段类似,这意味着保存文件的时间是多少,而不是认为它过时了。因此,“日期”和“过期”字段中的值不重要?浏览器将始终在三天后请求更新版本