提问人:Fabrício Matté 提问时间:2/28/2014 最后编辑:CommunityFabrício Matté 更新时间:2/28/2014 访问量:168
适当的缓存标头,以确保PHP页面始终被重新获取
Proper cache headers to ensure PHP pages are always re-fetched
问:
在花了 2 天时间阅读有关缓存标头的信息后,我仍然不确定什么是最佳组合,以确保始终从服务器重新获取具有动态内容的 PHP 页面。
我相信一个标头似乎就足够了,也许是一个带有过去值的标头,以确保与 HTTP 1.0 代理缓存的兼容性。Cache-Control: no-cache
Expires
普拉格玛
Pragma
未指定为响应标头:
注意:由于实际上未指定“Pragma: no-cache”作为响应标头字段的含义,因此它不能在响应中提供“Cache-Control:no-cache”的可靠替代
响应中标头的行为是特定于实现的,我相信当标头已经包含以下内容时,它不会增加太多:Pragma
Cache-Control: no-cache
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Pragma: no-cache
是非标准的,似乎完全没有必要。
缓存控制
标头接受许多值,所以这是我必须做的细分:Cache-Control
no-cache
表示将资源视为过时资源,并在后续请求上重新验证(通过 /)。这意味着,所以我不需要那些标题。一些最近的浏览器甚至将 .If-Modified-Since
If-None-Match
max-age=0, must-revalidate
no-cache
no-store
no-store
主要与安全有关,以防止在计算机中存储包含敏感数据的响应。我不仅通常不需要它,而且它似乎也是完全多余的,因为响应带有标头(必须重新验证)并且没有验证方法(无/),使响应无法被任何缓存使用。因此,这似乎是完全多余的。Cache-Control: no-cache
Last-Modified
ETag
proxy-revalidate
由于上述相同原因,似乎是多余的。public
/private
似乎也是多余的,因为任何缓存机制都无法使用响应。pre-check=0, post-check=0
是特定于 IE 的值,我认为这也是不必要的。
上下文
我没有使用 SSL/HTTPS,所以据说出现的 IE8 错误不适用于这个问题。我也不在乎浏览器在按下后退/前进按钮时是否使用存储的副本或重新获取资源。Cache-Control: no-cache
问题
我上面的所有假设都正确吗?我忽略了什么吗?或者任何可能的改进?
引用
答:
我相信你的假设是正确的。我做过很多涉及动态数据的项目,我们只需要(HTTP/1.1 标头)。设置过去的日期也是涵盖 HTTP/1.0 用户代理的好做法。Cache-Control: no-cache
Expires:
也就是说,如果您想明确通知请求代理该页面与以前的访问绝对不同,则可能值得发送基于时间的标题。这样一来,任何以前获取的副本都将具有不同的副本,并且代理将知道现在发送的副本是新的。这将略微增加请求标头大小,因为请求将包含前一个(如果有)。Etag:
Etag
Etag
评论
Cache-Control: no-cache
评论