我想在IIS7中为我的ASP.NET网站中的静态内容缓存设置规则.
我已经看过这些文章,详细介绍了如何使用以下<clientCache />元素web.config:
但是,此设置似乎全局适用于所有静态内容.有没有办法只为某些目录或扩展这样做?
例如,我可能有两个需要单独缓存设置的目录:
/static/images
/content/pdfs
是否有可能建立规则发送缓存头(max-age,expires基于扩展和文件夹路径等)?
请注意,我必须能够这样做,web.config因为我无法访问IIS控制台.
在部署新版本的网站后,浏览器会从旧网页的缓存中加载所有内容,直到强制刷新完成为止.图像很旧,cookie很旧,而且有些AJAX部件不能正常工作.
部署后,如何继续使用最新版本的页面为用户提供服务?
该网页是使用IIS7 +的ASP.Net网页.
默认情况下,$ .getScript()禁用缓存,您可以使用$ .ajaxSetup并将缓存设置为true.当测试脚本是否实际上是用Firebug缓存时,脚本大部分时间都会返回200(这意味着脚本是一个新的副本),一个可能20或30次,它将返回304(意味着它使用了缓存)版).为什么绝大部分时间都会收到新版本?
$.ajaxSetup({
cache: true
});
$.getScript( scriptFile );
Run Code Online (Sandbox Code Playgroud)
尚未编辑getScript检索的文件,并且请求是页面更改.
将项目移动到生产服务器后,我发现静态文件(如图像)不会返回状态为"304 not modified",尽管有"Last-Modified"和"Expires"等缓存标题.
请求标题
Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2
Cache-Control:max-age=0
Connection:keep-alive
Cookie:_LANG=ru
DNT:1
Host:test.com
If-Modified-Since:Mon, 07 Sep 2015 08:46:37 GMT
If-None-Match:"1D0E949B4DCD480"
Referer:http://test.com/ru/Some/Index/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36
Run Code Online (Sandbox Code Playgroud)
响应标头
HTTP/1.1 200 OK
Cache-Control: public
Content-Type: image/png
Expires: Tue, 08 Sep 2015 14:33:06 GMT
Last-Modified: Mon, 07 Sep 2015 08:46:37 GMT
Accept-Ranges: bytes
ETag: "1D0E949B4DCD480"
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 07 Sep 2015 14:33:06 GMT
Content-Length: 5953
Run Code Online (Sandbox Code Playgroud)
在本地"IIS快递"一切正常.
本地响应标头
HTTP/1.1 304 Not Modified …Run Code Online (Sandbox Code Playgroud) asp.net ×2
caching ×2
iis ×2
iis-7 ×2
asp.net-mvc ×1
deployment ×1
getscript ×1
http-headers ×1
iis-8 ×1
javascript ×1
jquery ×1
web-config ×1