加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 缓存通过VirtualPathProvider返回的静态资源

发布时间:2020-12-16 07:40:17 所属栏目:asp.Net 来源:网络整理
导读:我正在使用VirtualPathProvider,它当前将虚拟路径映射到解决方案外部的目录.我正在建立这个主要是为了自我锻炼.这完全等同于在解决方案目录中具有软链接或NTFS硬链接. 无论如何,我设法使用我的自定义提供程序从该虚拟目录成功加载静态图像. 现在的问题是浏览
我正在使用VirtualPathProvider,它当前将虚拟路径映射到解决方案外部的目录.我正在建立这个主要是为了自我锻炼.这完全等同于在解决方案目录中具有软链接或NTFS硬链接.

无论如何,我设法使用我的自定义提供程序从该虚拟目录成功加载静态图像.

现在的问题是浏览器不会缓存图像.并且服务器甚至不考虑返回缓存信息(如ETag).

这就是我所做的:

> GetFile(path).Open()通过File.Open()返回FileStream
>我没有覆盖GetCacheKey和GetCacheDependencies
>我确实覆盖了GetFileHash返回Murmur哈希(似乎是最快的,甚至比CRC-32)并测试了它
>在调试时,从不在我的提供程序中调用GetFileHash

CTRL-F5ing仅返回以下标头(不引用缓存)

Cache-Control   private
Content-Length  476
Content-Type    image/png
Date    Sat,29 Dec 2012 21:25:54 GMT
Server  Microsoft-IIS/8.0
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
X-SourceFiles   [...]

我目前正在调试Visual Studio的调试服务器和配备Firebug的Firefox.

举个例子,这就是我的预期(http://i.stack.imgur.com/3mn3d.png)

Accept-Ranges   bytes
Cache-Control   max-age=315360000
Content-Length  1059
Content-Type    image/png
Date    Sat,29 Dec 2012 21:35:29 GMT
Etag    "7d636a8ef932ed081c16ace6f87b16e6"
Expires Fri,12 Feb 2038 09:58:39 GMT
Last-Modified   Tue,14 Feb 2012 22:07:18 GMT
Server  ECAcc (fcn/4089)
X-Cache HIT

问题很明显:如何让浏览器不重新加载这些静态资源?

解决方法

要缓存数据我通常以这种方式使用webconfig,这在我的个人建议中非常简单:

<system.webServer>
    <staticContent>
       <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="180.00:00:00" />
    </staticContent>
   <caching>
    <profiles>
    <add extension=".ico" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".htm" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".pdf" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".bmp" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".jpeg" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".png" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".gif" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".js" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".css" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    <add extension=".jpg" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
    </profiles>
   </caching>
  </system.webServer>

我已经解决了所有问题.

你可以看看http://italiancallcenter.com使用相同的技术或http://annunciando.biz你可以在你的最后检查萤火虫或铬….

我从未优化的唯一东西是etags.

我希望这是有帮助的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读