如果我创建一个基本的asp.net应用程序并设置@outputcache,那么页面在chrome& IE在桌面上。第一个请求返回200,后续请求返回304为default.aspx。 (我正在通过提琴手进行监控)
然而,从iPhone访问同一页面我注意到它总是为aspx文件返回200。所有资源都在缓存,并且正在返回304。所以这只是aspx页面。
为什么会发生这种情况?
一些技术细节:
答案 0 :(得分:1)
我想我明白了。不过请随意纠正我。网站缓存是一个非常混乱的领域。
问题的根源是iPhone没有发送“If-Modified-Since”标头及其请求。没有它,服务器无法用304回复。
经过一些实验后,我发现如果您使用链接导航到该页面,它将发送'If-Modified-Since'标题,一切都按预期工作,服务器整齐地返回一个304。
不发送“If-Modified-Since”的情况,即使它已被缓存:
它似乎只是为主url执行此操作所引用的所有其他内容都具有“If-Modified-Since”标头(如果适用)。
注意:我仅在IOS 4.3.1上测试了这个。看看Paddo发送和进一步调查该领域的链接,似乎Apple喜欢改变IOS版本之间的缓存行为。
答案 1 :(得分:0)
发现这个,重新php(也将适用于.net)... iphone似乎不会缓存超过15k的任何资源,总缓存大小为1.5MB。请注意,这是旧信息,因此可能已更改。
http://www.phpied.com/iphone-caching/
超过15k的文件解决方案是使用脱机应用程序缓存清单文件,如下所述: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/Client-SideStorage/Client-SideStorage.html
PS我知道你的内容长度低于15k - 所以其他东西必须是错误的...但我仍然希望清单文件能够正常工作。
答案 2 :(得分:-1)
for ASP.NET只需使用
Response.AddHeader( "Cache-Control","no-cache");
或
Response.AddHeader( "Pragma", "no-cache");
或
Response.Cache.SetCacheability(HttpCacheability.NoCache);