2011-04-09 70 views
1

如果我创建了一个基本的asp.net应用程序并设置了@outputcache,该页面在桌面上的Chrome & IE中缓存的很好。第一个请求返回200,随后的请求返回304为default.aspx。 (我通过提琴手进行监控)iPhone没有缓存Asp.Net页面

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

任何想法为什么会发生这种情况?

一些技术细节:

  • <%@的OutputCache时间= “30” 的VaryByParam = “无” 位置= “任何” %>
  • 股票标准的ASPX页面。内容长度:2464
  • 使用刷新控制或键盘“重新加载iPhone”并没有什么区别。
  • 明确设置的ETag不有所作为
  • 的Last-Modified设置
  • 但如果修改 - 既然是被发送的ASPX页面
  • 最新的iOS 4.3.1
  • IIS 7.5使用ASP.NET 4

回答

1

我想我明白了。然而,请随时纠正我。网站缓存是一个非常混乱的领域。

问题的根源在于iPhone并未发送“If-Modified-Since”标头及其请求。没有这个服务器不能回复一个304.

经过一些实验后,我发现,如果你使用链接导航到页面,它会发送'If-Modified-Since'标题,一切工作作为预期和服务器整齐地返回一个304。

例,其中它发送“如果修改 - 因为”即使它的缓存:

  • 键入的URL
  • 的刷新按钮
  • 选择URL,然后按前往
  • 作为书签打开
  • 从主屏幕上保存的参考打开

它似乎只为主网址做了这件事,其他所有被引用的网站都有一个“If-Modified-Since”头(如果适用)。

注意:我只在IOS 4.3.1上测试过。看看Paddo发送的链接以及对该区域的进一步调查,似乎苹果喜欢更改IOS版本之间的缓存行为。

-1

为ASP.NET只使用Win7上运行

Response.AddHeader("Cache-Control","no-cache"); 

Response.AddHeader("Pragma", "no-cache"); 

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
+0

他说这不是缓存,而是提供关于如何设置缓存的提示。为什么? – 2011-04-09 07:52:40

+0

你是否看过我的帖子? – batkuip 2011-04-09 07:54:31

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 - 所以别的东西必须是错误的......但我仍然希望清单文件能够起作用。

+0

感谢您的链接。非常丰富。然而,它并没有解决我的直接问题。它确实给了我一个想法,我想我已经完成了。将尽快报告。 – batkuip 2011-04-09 11:21:44