我正在使用一个VirtualPathProvider,它将虚拟路径映射到解决方案外部的目录。我主要是为了自己练手而构建这个。这完全相当于在解决方案目录中有一个软链接或NTFS硬链接。
无论如何,我成功地使用我的自定义提供程序从那个虚拟目录加载静态图像。
现在的问题是浏览器不会缓存图像。服务器甚至不考虑返回缓存信息(例如ETag)。
这是我做过的:
- GetFile(path).Open() 通过 File.Open() 返回 FileStream - 我没有重写 GetCacheKey 和 GetCacheDependencies - 我确实重写了 GetFileHash,返回 Murmur 哈希(似乎比 CRC-32 更快),并进行了测试 - 在调试时,GetFileHash 从未在我的提供程序中被调用
CTRL-F5 只返回以下标头(没有缓存引用)
问题很明显:我该如何让浏览器不要重新加载这些静态资源?
无论如何,我成功地使用我的自定义提供程序从那个虚拟目录加载静态图像。
现在的问题是浏览器不会缓存图像。服务器甚至不考虑返回缓存信息(例如ETag)。
这是我做过的:
- GetFile(path).Open() 通过 File.Open() 返回 FileStream - 我没有重写 GetCacheKey 和 GetCacheDependencies - 我确实重写了 GetFileHash,返回 Murmur 哈希(似乎比 CRC-32 更快),并进行了测试 - 在调试时,GetFileHash 从未在我的提供程序中被调用
CTRL-F5 只返回以下标头(没有缓存引用)
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
问题很明显:我该如何让浏览器不要重新加载这些静态资源?