我在Windows Mobile5.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 GMTLast-Modified标头是动态计算的,并设置为“now”。
尽管如此,手持设备似乎正在缓存这些页面:页面与标题一起发送,但当它们断开无线网络并单击指向该页面的链接(这不应该被缓存)时,它仍然会返回这个缓存的文件。
有没有其他的头需要发送,或者这只是Pocket IE的一个问题?或者它可能是完全不同的东西?
谢谢!
发布于 2009-07-30 16:33:55
我不确定我能不能回答你的问题,因为我没有Pocket IE可以测试,但也许我可以提供一些帮助。
这是一个非常好的缓存参考:http://www.mnot.net/cache_docs/
此外,我不确定您的示例是header的粘贴结果,还是您为发送header而设置的代码,但我认为大多数语言实现(通过扩展,我假设大多数浏览器实现)中的header集合都被视为一个映射;因此,您可能已经用第二个"Cache-Control“头部覆盖了"no-store,no-cache,必须重新验证”。换句话说,只能发送一个,如果最后一个成功,您只发送"post-check=0,pre-check=0“。
您还可以尝试添加max-age=0标头。
根据我的经验,Firefox和IE似乎都对HTTPS提供的页面更加敏感。如果你有选择的话,你可以试一试。
如果你仍然没有运气,而且Pocket IE的表现与Windows IE明显不同,那么我猜测手持设备有特殊的缓存规则,这是基于它将经常远离互联网连接的假设。
编辑:在你提到CNN.com之后,我意识到你在缓存控制中没有“”头。我认为这就是CNN.com缓存页面而不是你的页面的原因。我相信"private“是"Cache-Control header”中最严格的设置,试着加上它。
例如,以下是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,它是一个很好的工具来检查任何网站的响应头-在“信息”下拉列表中,“查看响应头”在底部。
发布于 2009-08-03 12:11:31
尽管Renesis一直在努力帮助我,但我不得不放弃。
我说的“放弃”是指我作弊了。我没有尝试在客户端解决这个问题,而是采用了服务器端的方法。
我最终做的是用PHP编写一个函数,该函数将接受一个URL,并使其本质上是唯一的。它通过基于对uniqid()的调用添加一个随机的GET参数来实现这一点。然后我对它做了一些其他的小事情:确保我添加了一个'?‘根据是否存在其他GET参数,将“&”或“&”添加到URL,并确保将任何“#”锚定项直接推送到末尾,然后将该URL返回给浏览器。
这基本上解决了问题,因为浏览器看到的每个链接都是唯一的:它以前从未见过那个特定的URL,因此无法从缓存中检索它。
像黑客一样?是。工作吗?到现在为止还好。
https://stackoverflow.com/questions/1207626
复制相似问题