我在我的asp.net页面(asp.net 4.0)中添加了一个outputcache指令:
<%@ OutputCache Duration="3600" Location="Client" VaryByParam="None" %>
但是,这似乎不起作用。当我检查http标头信息时,我看到了:
HTTP/1.1 200 OK =>
Cache-Control => no-cache, no-store
Pragma => no-cache
Content-Type => text/html; charset=utf-8
Expires => -1
Server => Microsoft-IIS/7.0
X-AspNet-Version => 4.0.30319
Set-Cookie => ASP.NET_SessionId=0txhgxrykz5atrc3a42lurn1; path=/; HttpOnly
X-Powered-By => ASP.NET
Date => Tue, 15 Nov 2011 20:47:28 GMT
Connection => close
Content-Length => 17428
以上显示未应用OutputCache指令。我甚至从codebehind尝试了这个:
this.Response.Cache.SetExpires(DateTime.Now.AddHours(1.0));
TimeSpan ds = new TimeSpan(0, 1, 0, 0);
this.Response.Cache.SetMaxAge(ds);
上面的代码应该与OutputCache指令具有相同的结果,但是当我检查http标头信息时,我可以看到它仍然没有被应用。
基本上,这里的目的是确保当用户单击后退按钮并登陆我的页面时,将不会从服务器检索该页面。我想避免获取要求用户“重新发送”的浏览器弹出窗口。我希望浏览器只使用它在缓存中的页面副本。
感谢您提供任何帮助。
答案 0 :(得分:3)
从你的问题:
我想避免获取要求用户的浏览器弹出窗口 '重发。'我希望浏览器只使用它拥有的页面副本 在它的缓存中。
如果浏览器要求您重新发送数据,则表示内容是对POST请求的响应。
根据RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1:
某些HTTP方法必须导致缓存使实体无效。这是 要么是Request-URI引用的实体,要么是位置
或Content-Location标头(如果存在)。这些方法是:
- PUT
- DELETE
- POST
因此,要使缓存工作,您需要将POST转换为GET。