【问题标题】:iPhone not caching Asp.Net pagesiPhone 不缓存 Asp.Net 页面
【发布时间】:2011-08-01 23:54:40
【问题描述】:

如果我创建了一个基本的 asp.net 应用程序并设置了@outputcache,则页面在桌面上的 chrome 和 IE 中缓存得很好。对于 default.aspx,第一个请求返回 200,后续请求返回 304。 (我正在通过 fiddler 进行监控)

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

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

一些技术细节:

  • 库存标准 ASPX 页面。内容长度:2464
  • 使用刷新控件或键盘“go”在 iPhone 上重新加载没有任何区别。
  • 显式设置 eTag 不会产生影响
  • Last-Modified 已设置
  • 但 If-Modified-Since 没有为 ASPX 页面发送
  • 最新IOS 4.3.1
  • IIS 7.5 使用 ASP.NET 4 在 Win7 上运行

【问题讨论】:

    标签: iphone asp.net caching


    【解决方案1】:

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

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

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

    它确实发送“If-Modified-Since”的情况,即使它已被缓存:

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

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

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

    【讨论】:

      【解决方案2】:

      找到这个,重新 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 - 所以肯定有其他问题......但我仍然希望清单文件能够正常工作。

      【讨论】:

      • 感谢您的链接。信息量很大。但是它并没有解决我的直接问题。它确实给了我一个想法,我想我已经解决了。很快就会回来报告。
      【解决方案3】:

      对于 ASP.NET,只需使用

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

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

      Response.Cache.SetCacheability(HttpCacheability.NoCache);
      

      【讨论】:

      • 他说这不是缓存,您正在提供有关如何在头部设置无缓存的提示。为什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多