【问题标题】:Pocket IE: Still seems to be caching?Pocket IE:似乎还在缓存?
【发布时间】:2009-07-30 16:08:20
【问题描述】:

我在使用在 Windows Mobile 5.0 下运行的特定版本的 Pocket IE 时遇到问题。不幸的是,我不确定确切的版本号。

我们遇到了一个问题,即当无线网络关闭时,这个特定的“安装”会返回页面的本地缓存版本。很公平,没问题。我们清除了手持设备的缓存并开始发送以下标头:

Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Thu, 30 Jul 2009 16:42:08 GMT

Last-Modified 标头即时计算并设置为“现在”。

即便如此,手持设备似乎仍在缓存这些页面:该页面与标头一起发送,但是当他们断开无线网络并单击指向该页面的链接(不应该被缓存)时,它仍然返回这个缓存文件。

是否应该发送其他一些标头,或者这只是 Pocket IE 的问题?还是可能完全不同?

谢谢!

【问题讨论】:

    标签: browser windows-mobile caching


    【解决方案1】:

    我不确定我是否能回答你的问题,因为我没有可以测试的 Pocket IE,但也许我可以提供一些可以提供帮助的东西。

    这是一个很好的缓存参考:http://www.mnot.net/cache_docs/

    另外,我不确定您的示例是您的标头的粘贴 results,还是您设置用于发送标头的代码,但我相信标头的集合大多数语言实现(以及我假设大多数浏览器实现)都被视为地图;因此,您可能已经用第二个“Cache-Control”标头覆盖了“no-store, no-cache, must-revalidate”。换句话说,只能发送一个,如果最后一个获胜,您只发送“post-check=0, pre-check=0”。

    您也可以尝试添加 max-age=0 标头。

    根据我的经验,Firefox 和 IE 似乎对 HTTPS 提供的页面也更敏感。如果可以的话,可以试试。

    如果您仍然没有运气,并且 Pocket IE 的行为与 Windows IE 明显不同,那么我的猜测是手持设备具有特殊的缓存规则,基于它通常会远离 Internet 连接的假设。

    编辑: 在您提到 CNN.com 之后,我意识到您在 Cache-Control 中没有“私有”标头。我认为这就是让 CNN.com 缓存页面而不是您的页面的原因。我相信“private”是“Cache-Control 标头中可用的最严格的设置。尝试添加它。

    例如,这里是 CNN 的标题。 (我不认为两次列出“私人”有任何影响)

    Date: Fri, 31 Jul 2009 16:05:42 GMT
    Server: Apache
    Accept-Ranges: bytes
    Cache-Control: max-age=60, private, private
    Expires: Fri, 31 Jul 2009 16:06:41 GMT
    Content-Type: text/html
    Vary: User-Agent,Accept-Encoding
    Content-Encoding: gzip
    Content-Length: 21221
    
    200 OK
    

    如果您没有Firefox Web Developer Toolbar,它是检查任何网站的响应标头的好工具 - 在“信息”下拉菜单中,“查看响应标头”位于底部。

    【讨论】:

    • 感谢您的留言。只是想说我已经从我的 PHP 代码中复制了标题并“调整”了 PHP 代码。因此标题不正确:我已经编辑了帖子并复制了标题的精确副本(无论如何,就 Firefox 而言)。只是想让您知道:我要阅读该链接并尝试使用 max-age 标头,谢谢。
    • 如果 Pocket IE 正在实施一些有趣的规则,可能是因为它看到“Last-Modified”的存在,它假设它可以缓存页面一段时间。您可以尝试完全删除它并消除 Apache 可能返回 304 Not Modified 的机会。根据以下链接,这似乎是为了告诉浏览器始终简单地服从 Expires 标头。 askapache.com/htaccess/apache-speed-last-modified.html
    • 更多信息:已尝试使用 max-age 标头,以及删除最后修改的标头。还是没有骰子。令人讨厌的是,当他们访问 cnn.com(例如)时,手持设备不会缓存页面,所以我开始没有想法了 :(
    • 请看我对上面原始答案的补充。
    • 感谢 Renesis:我在缓存控制中添加了“私人”条目(两次,以防万一:))但仍然没有。基本上我已经放弃了,走了“作弊”路线。
    【解决方案2】:

    尽管 Renesis 在这里帮助我的表现很棒,但我不得不放弃。

    “放弃”是指我作弊了。我没有尝试在客户端解决此问题,而是选择了服务器端路由。

    我最终做的是用 PHP 编写一个函数,该函数将获取一个 URL 并从本质上使其独一无二。它通过基于对 uniqid() 的调用添加随机 GET 参数来实现此目的。然后我对它做一些其他的小事情:确保我添加了一个“?”或基于其他 GET 参数的存在对 URL 的“&”,并确保将任何“#”锚项目推到最后,然后我将该 URL 返回到浏览器。

    这基本上解决了这个问题,因为浏览器看到的每个链接都是唯一的:它以前从未见过该特定 URL,因此无法从缓存中检索它。

    黑客?是的。在职的?到目前为止,一切顺利。

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 2013-06-11
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多