我正在尝试测试一些缓存配置,我希望我的页面在请求再次到达服务器之前保留在缓存中1分钟.
<% Option Explicit %> <% Response.Expires = 1 Response.CacheControl = "private,max-age=60" %> <html> <head><title>test</title></head> <body> <% =Now() %> <br /> <a href="test.asp">test</a> </body> </html>
这在我的开发计算机http://localhost/test.asp上完美运行,(单击链接不会在1分钟内刷新打印的日期时间).
但是,当我将页面放在生产服务器上时,它没有达到预期的效果.点击链接仅几秒钟后,我得到一个新的日期时间,意味着请求到达了Web服务器.
我使用Chrome开发工具查看这些响应标头:
HTTP/1.1 200 OK Cache-Control: private,max-age=60 Content-Type: text/html Expires: Tue,12 May 2015 19:16:52 GMT Last-Modified: Tue,12 May 2015 19:10:00 GMT Server: Microsoft-IIS/7.5 X-Powered-By: ASP.NET Date: Tue,12 May 2015 19:15:55 GMT Content-Length: 205
任何人都可以帮助解释为什么它不能在prod服务器上工作?
更新
我尝试使用Chrome,Firefox和IE,还有2页test.asp和test2.asp,两者都有到另一页的链接,并且在8-12秒之后得到完全相同的问题,页面刷新而不是等待60秒在刷新之前.
解决方法
要跟进我的评论,看起来您可能正在考虑在服务器上缓存动态asp页面,而不是在客户端上.在客户端上缓存并不是很好,因为现代浏览器/代理仍然会在HTML文档时请求该项.缓存不改变的静态资源(如图像,css,js)应该可以工作,并且根据缓存标题推出浏览器将会尊重这些资源.
要让您的页面在服务器上缓存(意味着IIS不必重新生成页面),您可以在这里进行操作.
Web.config文件
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <caching> <profiles> <add extension=".asp" policy="CacheForTimePeriod" kernelCachePolicy="DontCache" duration="00:01:00" /> </profiles> </caching> </system.webServer> </configuration>
您可以将web.config放在特定目录中以仅缓存其内容,也可以使用querystring params或某些请求标头来中断缓存.