【问题标题】:Can a corporate proxy cache whole pages?公司代理可以缓存整个页面吗?
【发布时间】:2009-10-05 14:28:00
【问题描述】:

当我们的客户测试我们的 ASP.NET Web 应用程序时,我们看到了一些奇怪的错误。每个页面顶部都有一个购物车计数器,告诉您购物车中有多少商品。她报告说,随着她从一页移到下一页,这个数字正在发生变化。我们无法重新创建它。

是否有可能她的公司代理服务器正在缓存整个页面而从未真正联系我们的服务器?这是http上的临时站点,她的生产站点在https上。

修订:页面也通过 HTTPS 缓存。它显示了我们购物车页面的完全缓存版本。如果用户单击刷新按钮,他们将获得页面的当前版本,但该新版本将成为缓存版本。

【问题讨论】:

  • 您在应用中是否设置了 nocache 和其他各种“请不要缓存此页面”命令?
  • 不具体,但我们过去从未遇到过这个问题。我是否总是必须明确告诉代理服务器哪些内容是动态的?

标签: proxy


【解决方案1】:

中间代理(公司或其他)当然有可能正在缓存您的页面。虽然我不明白这将如何解释页面上的购物车号码更改。如果您不希望进行任何缓存,请将相应的 HTTP 标头与您不希望缓存的每个请求一起发送:

Cache-Control: private, no-store, max-age=0
Expires: <some date in the past>
Pragma: no-cache

上面的第一行用于 HTTP 1.1 客户端,第二行用于 HTTP 1.0 客户端。查看 HTTP 1.1 协议规范的14.9 部分了解所有血腥细节。

【讨论】:

  • 代理是否必须遵守 HTTP 过期标头?
  • 如果他们不这样做是一个错误,因为这些值是为了控制代理行为。
  • @Dominic Rodger 是的,如果它遵循规范。但这是一个荣誉系统 :( 很可能,你不是在与邪恶的代理人打交道 :)
  • 代理服务器可以根据需要忽略过期时间。有些是设计的,有些是配置的。
  • 我也有代理服务器甚至将页面结果返回到错误的会话。它通常是由于没有设置 no-cache 值引起的。 (大多数代理服务器假设缓存的结果可以返回给任何用户/会话)
【解决方案2】:

IE 中还有一个设置可能会导致此行为。转到“工具”>“Internet 选项”。在“常规”选项卡上,单击“浏览历史记录”下的“设置”。确保“检查存储页面的较新版本”设置为“自动”。这是默认值。

我有一个用户将其更改为“从不”,并且想知道为什么他总是看到旧内容。 :)

【讨论】:

  • 我刚刚给客户发了电子邮件,看看这是否是问题所在。我可以通过在具有 IE6 的机器上更改此设置来重现此问题。好主意!
  • 这正是问题所在。用户将 IE 设置为永远不会获得新版本的网页。为什么会这样设置,我可能永远不会知道。非常感谢您提供的信息。这无疑为我节省了很多时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
相关资源
最近更新 更多