Safari 10不会缓存图像

时间:2016-10-17 15:20:38

标签: asp.net-mvc http caching web safari

我有一个在Azure AppService上托管的ASP.NET MVC网站,我正在尝试在客户端启用动态图像的缓存(在Controller#File()方法的帮助下提供)。我用了一些技巧来实现这个目标:

  1. 将基于查询字符串的网址转换为“经典”网址,例如

    /file/i/Supplier/Logo/fed88a06-1157-4bbb-826d-365bdd8c89eb/png/cng.png

  2. 我正在使用IIS Rewrite模块将其转换回基于查询字符串的URL。

    1. 在返回图像的操作方法中添加了以下属性:

      [OutputCache(Duration = 31536000, Location = System.Web.UI.OutputCacheLocation.ServerAndClient)]
      //31536000 seconds represent one year 
      
      1. 最后,我在所有图像请求中强制执行304状态,其中If-Modified-Since标头包含的日期少于300天(图像不经常更改)。
    2. 它适用于除Safari 10和iOS 10之外的所有Web浏览器。在Sarafi 9,8,7,iOS 8.3.3,Chrome,Edge,Firefox中可以很好地缓存图像,但在Safari 10中,它们几乎永远不会被缓存(在iOS 10上也是如此,但它并不重要)。这种情况可以在两台物理Mac笔记本电脑以及BrowserStack上的Mac VM上重现。 Safari中的缓存已禁用。

      Apple的最新网络浏览器是否有任何特殊之处,他们没有按预期缓存资源?或者,我做错了什么?

      我不知道如何在Safari中查看请求和响应标头(是否可以?)但在Chrome中,请求和响应标头如下所示。

      为清楚起见,我删除了Host,Referrer和Cookie标头。

      第一次运行

      请求

      Accept:image/webp,image/*,*/*;q=0.8
      Accept-Encoding:gzip, deflate, sdch
      Accept-Language:en-US,en;q=0.8,ru;q=0.6,sr;q=0.4
      Cache-Control:no-cache
      Connection:keep-alive
      DNT:1
      Pragma:no-cache
      User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
      

      响应

      Cache-Control:private, max-age=31533495
      Content-Length:32300
      Content-Type:image/png
      Date:Mon, 17 Oct 2016 14:58:59 GMT
      Expires:Tue, 17 Oct 2017 14:17:13 GMT
      Last-Modified:Mon, 17 Oct 2016 14:17:13 GMT
      Vary:*
      X-Frame-Options:SAMEORIGIN
      

      第二次运行

      请求

      Accept:image/webp,image/*,*/*;q=0.8
      Accept-Encoding:gzip, deflate, sdch
      Accept-Language:en-US,en;q=0.8,ru;q=0.6,sr;q=0.4
      Connection:keep-alive
      DNT:1
      If-Modified-Since:Mon, 17 Oct 2016 14:17:12 GMT
      User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
      

      响应

      Request URL:http://******/file/i/Supplier/Logo/1f70c0ac-309c-4629-9186-6ee1b3700d3e/png/crown-logo.png
      Request Method:GET
      Status Code:304 Not Modified
      
      Cache-Control:private, max-age=31533237
      Date:Mon, 17 Oct 2016 15:03:15 GMT
      Expires:Tue, 17 Oct 2017 14:17:12 GMT
      Last-Modified:Mon, 17 Oct 2016 14:17:12 GMT
      Vary:*
      X-Frame-Options:SAMEORIGIN
      

0 个答案:

没有答案