【问题标题】:I don't want browser to cache response redirect我不希望浏览器缓存响应重定向
【发布时间】:2013-03-16 23:52:23
【问题描述】:

当发生错误时,我正在做 Response.Redirect

但我看到这给一些访问者带来了麻烦。因为愚蠢的浏览器使用缓存,他们无法再次看到该页面。由于错误是暂时的,因此会造成很大的麻烦

所以我不希望缓存任何重定向

我做了一些搜索并想出了

Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache)

但我希望一切都被缓存(图像)期望重定向本身。那么最好的解决方案是什么?

Asp.net c# 4.5 - 网络框架 4.5

【问题讨论】:

  • 看看你能不能把 http-status-code 改成 302 或 307 (temperary-redirect) 浏览器不会缓存它。
  • @CorvinMcpherson 不缓存是默认行为。实际上,目前他们应该不缓存 response.redirect。但是一些访问者报告说他们不断被重定向。因此,即使默认情况下它们不应该缓存,他们的浏览器似乎也在缓存。
  • 旁注:“有些人报告了一些麻烦”很难解决。自己重现行为或收集更多信息,直到你能理解问题。据您所知,他们将浏览器设置为永远不会使缓存无效...考虑询问 Fiddler 跟踪(或其他将报告浏览器发出的所有请求的工具),以确保您了解什么是缓存,什么没有缓存。
  • @AlexeiLevenkov 你说的很对。我正在捕获服务器端错误。但是没有错误。肯定是用户浏览器造成的。而且我无法重现错误。但我很确定这是由缓存引起的。

标签: c# asp.net caching redirect response.redirect


【解决方案1】:

一个简单的技巧是在重定向网址的末尾添加一个随机参数。

例如

Response.Redirect("/page.aspx?_rnd=" + RndNumber);

其中RndNumber 是一个随机数,您通过检查是否有其他参数来创建url,以正确添加随机数。浏览器将页面 url 与 url 参数一起缓存,因此您可以避免您提到的问题。

【讨论】:

  • 现在这是一个不错的解决方案。但据我测试, Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache) 方法不会强制浏览器重新加载图像或 javascript 或 css 文件。我错了吗?
  • @MonsterMMORPG 你是对的。每个文件都有自己的缓存头。
  • 您也可以将相同的模式应用于静态文件。您可能希望将此“缓存破坏器”基于随机数以外的其他内容,但可以更好地控制何时希望客户端获取新文件
  • @Aristos 所以没有缓存到 aspx 文件是没有害处的 :) 很高兴知道。因为浏览器仍会缓存所有内容(图像、css、javascript 文件)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2017-08-07
相关资源
最近更新 更多