我遇到了在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标头即时计算并设置为“now”。
即便如此,手持设备似乎也在缓存这些页面:页面随头文件一起发送,但是当他们断开无线网络并点击页面链接(不应该被缓存)时,它仍然会返回此页面缓存文件。
是否应该发送一些其他标头,或者这只是Pocket IE的一个问题?或者它可能是完全不同的东西?
谢谢!
答案 0 :(得分:1)
我不确定我能回答你的问题,因为我没有Pocket IE可以测试,但也许我可以提供一些可以提供帮助的东西。
这是一个非常好的缓存参考:http://www.mnot.net/cache_docs/
另外,我不确定您的示例是否是标头的粘贴结果,或者您为发送标头而设置的代码,但我相信标题的集合在大多数语言实现(并且通过扩展我假设大多数浏览器实现)被视为一个映射;因此,您可能已使用第二个“Cache-Control”标头覆盖了“no-store,no-cache,must-revalidate”。换句话说,只有一个可以发送,如果最后一次获胜,你只发送“post-check = 0,pre-check = 0”。
您也可以尝试添加max-age = 0标头。
根据我的经验,Firefox和IE似乎对HTTPS提供的页面也更敏感。如果您将它作为一种选择,您可以试试。
如果你仍然没有运气,而且Pocket IE的行为明显不同于Windows IE,那么我的猜测是掌上电脑有一些特殊的缓存规则,基于它经常远离互联网连接的假设。
修改强> 在您提到CNN.com之后,我意识到您在Cache-Control中没有“私有”标头。我认为这是使CNN.com缓存页面而不是你的页面的原因。我相信“私有”是“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,那么它是检查任何网站的响应标头的绝佳工具 - 在“信息”下拉列表中,“查看响应标头”位于底部。
答案 1 :(得分:0)
尽管Renesis在帮助我的过程中一直很棒,但我不得不放弃。
通过'放弃'我的意思是我被骗了。我没有尝试在客户端解决这个问题,而是采用了服务器端路径。
我最终做的是在PHP中编写一个函数,它将获取一个URL并基本上使其独一无二。它通过添加基于对uniqid()的调用的随机GET参数来实现。然后我做了几件其他小事:确保我添加'?'或'&'根据其他GET参数的存在来确定URL,并确保将任何“#”锚项直接推到最后,然后将该URL返回给浏览器。
这基本上解决了这个问题,因为浏览器看到的每个链接都是唯一的:它以前从未见过特定的URL,因此无法从缓存中检索它。
的hackish?是。工作?到目前为止,非常好。