iPhone没有缓存Asp.Net页面

时间:2011-04-09 07:44:13

标签: iphone asp.net caching

如果我创建一个基本的asp.net应用程序并设置@outputcache,那么页面在chrome& IE在桌面上。第一个请求返回200,后续请求返回304为default.aspx。 (我正在通过提琴手进行监控)

然而,从iPhone访问同一页面我注意到它总是为aspx文件返回200。所有资源都在缓存,并且正在返回304。所以这只是aspx页面。

为什么会发生这种情况?

一些技术细节:

  • <%@ OutputCache Duration =“30”VaryByParam =“None”Location =“Any”%>
  • 股票标准ASPX页面。内容长度:2464
  • 使用刷新控制或键盘“go”重新加载iPhone并没有什么区别。
  • 明确设置eTag并没有什么区别
  • Last-Modified已设置
  • 但是If-Modified-Since 正在为ASPX页面发送
  • 最新的IOS 4.3.1
  • 使用ASP.NET 4在Win7上运行的IIS 7.5

3 个答案:

答案 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);