【发布时间】:2012-01-25 00:45:19
【问题描述】:
我正在使用 PHP 开发一些软件,并且正在尝试使其有效地利用 HTTP 缓存。但是,我最近遇到的问题之一是登录后,登录之前访问的页面被缓存并且不像登录一样。
如果 PHP 和客户端之间存在 HTTP 缓存,这尤其是一个问题。如果我将缓存限制器设置为始终为“公共”,则该页面可能会始终被缓存(即使是通过代理缓存。)如果我在未登录时将缓存限制器设置为“公共”,而在登录时将其设置为“私有”在,我目前遇到的问题可能仍然会发生。如果我将缓存限制器设置为始终为私有,则代理缓存根本不会受益,并且我目前遇到的问题可能仍然会发生。
这个问题的理想解决方案是什么?有没有办法在用户登录后让网络浏览器“重试”?对于代理缓存,我知道有一些方法可以根据传入的 cookie 进行缓存,所以我相信这可以解决部分问题。但是从网络浏览器的角度来看问题呢?
【问题讨论】:
-
must-revalidate或proxy-revalidate会是这里的神奇关键字吗? -
哦,我忘了
must-revalidate...你可能是对的。不过,我确实相信它会导致 nginx(作为缓存代理)不缓存。我该怎么办?我想在这里使用 nginx。 -
其实我弄错了。我阅读了这个主题(因为我从来不记得这些),这仅意味着缓存的副本必须在副本过时后重新验证。
-
哦,好吧。在此期间,我将做更多的研究。不过,感谢您的尝试。
-
只是一个想法...您是否提供了带有 Expires/Last-Modified 标头的 ETag?您可以使用登录用户的 ID(或类似 ID)重新散列 ETag,或者干脆不为登录用户使用服务器。虽然我猜中间的激进代理可能仍然存在问题。
标签: php http caching http-caching