繁体   English   中英

iPhone不缓存Asp.Net页面

[英]iPhone not caching Asp.Net pages

如果我创建一个基本的asp.net应用程序并设置@outputcache,则该页面可以在桌面上的chrome&IE中很好地缓存。 对于default.aspx,第一个请求返回200,随后的请求返回304。 (我正在通过提琴手进行监视)

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

任何想法为什么会这样?

一些技术细节:

  • <%@ OutputCache持续时间=“ 30” VaryByParam =“无”位置=“任何”%>
  • 库存标准ASPX页面。 内容长度:2464
  • 使用刷新控件或键盘“转到”在iPhone上重新加载没有影响。
  • 显式设置eTag不会产生任何影响
  • 设置了上次修改
  • 但是没有为ASPX页发送If-Modified-Since
  • 最新的IOS 4.3.1
  • 使用ASP.NET 4在Win7上运行的IIS 7.5

我想我知道了。 随时纠正我。 网站缓存是一个非常混乱的领域。

问题的根源在于,iPhone没有随请求一起发送“ If-Modified-Since”标头。 否则,服务器将无法回复304。

经过一些实验,我发现如果您使用链接导航到页面,它将发送'If-Modified-Since'标头,并且一切都按预期工作,并且服务器巧妙地返回304。

即使已缓存它也不会发送“ If-Modified-Since”的情况:

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

它似乎只对主URL进行了此操作,否则所引用的其他所有内容都具有“ If-Modified-Since”标头(如果适用)。

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

找到了这个,重新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以下-因此必须解决其他问题...但是我仍然希望清单文件可以工作。

对于ASP.NET只需使用

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

要么

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

要么

Response.Cache.SetCacheability(HttpCacheability.NoCache);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM