Bri*_*Kay 5 c# vb.net asp.net iis caching
我注意到,当我Response.Redirect到.aspx页面时,它有时会显示一个缓存页面而不是实际执行页面并从数据库中提取新数据.
我没有在这里使用输出缓存或任何特殊的东西 - 这是一个CRM,缓存要么在客户端发生,要么更有可能在IIS中自动发生.
顺便说一下,从来没有涉及过查询.我通过会话传递密钥.我知道如果我使用查询字符串它可能会部分绕过缓存问题,但在这种情况下它不是一个选项,无论如何我真正想要的是更深入地了解正在发生的事情.
我做了一点挖掘,有些人通过使用Server.Transfer(其实际行为与Response.Redirect不同,并且一些细节并不总是可取的)来解决这个问题,并且其他一些人说要设置Response.Cache.SetCacheability( HttpCacheability.NoCache)在我要避免缓存的页面上.
我希望更好地了解这里发生的事情,并且可能是最佳实践 - 首先,我认为.aspx页面总是被标记为避免缓存.对?
有什么想法吗?
默认情况下,不会发送任何用于控制缓存的标头.这使客户端可以自行制定有关如何缓存发送内容的规则.
所以是的,你需要这样的东西: -
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Run Code Online (Sandbox Code Playgroud)
确保请求(重定向或其他)不仅仅使用缓存版本.
Response.Redirect向浏览器发送一个响应,告诉它请求的对象已移动并向其提供新位置.在这种情况下,如果您重定向到"redirect.aspx",如果浏览器在缓存中有该项,则只要满足可达性标准,它就会从那里显示.
你提到Response.Transfer,但你的意思是Server.Transfer.这是将执行上下文传输到新页面的服务器端机制.因此,用户在您的应用中请求"main.aspx".在该页面中,您将Server.Transfer转移到"transferred.aspx".在服务器端,它是相同的请求,因此当呈现输出时,客户端的浏览器将显示URL"main.aspx",而不是"transferred.aspx".
总结一下 - Redirect = 2个请求,Transfer = 1个请求.希望有所帮助.
是的,如果您希望页面始终调用服务器,则需要设置可调性.默认情况下,aspx没有特殊的浏览器行为,因为它只发送html.你可以设置:
例如,Response.Expires = -1.
| 归档时间: |
|
| 查看次数: |
5610 次 |
| 最近记录: |