如何阻止IE缓存未经身份验证的重定向?

时间:2015-03-26 22:15:44

标签: asp.net-mvc internet-explorer redirect web-config http-caching

我的应用程序配置为重定向到身份验证错误的登录页面:

<configuration>
    <system.webServer>
        <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
          <remove statusCode="401" />
          <error statusCode="401" responseMode="Redirect" path="/Login" />
        </httpErrors>
    </system.webServer>
<configuration>

这会产生302重定向而不是401,并且用户将进入登录页面。在大多数浏览器上,这很好。在IE(10和11,我们支持的唯一版本)上,我们有时会看到此重定向被缓存,所以会发生这种情况:

  • 未登录用户导航至/
  • 未经身份验证的请求已302重定向至/Login
  • 用户成功输入凭据
  • 登录页面将用户引导至/
  • IE记得上次导航到/时,它收到了302响应,因此它甚至不打算向服务器发送另一个请求,并立即循环回/Login代替

主要应用程序是MVC5,所以我尝试添加一个仅限IE的过滤器,强制它不缓存。例如:

public class InternetExplorerNoCacheFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (RequestBrowserIsInternetExplorer)
            filterContext.HttpContext.Response.ExpiresAbsolute = DateTime.UtcNow.AddDays(-1);
    }
}

它在普通页面上按预期执行。但不幸的是,web.config身份验证重定向发生在管道中的早期,因此我的过滤器不会被调用未经身份验证的请求,这是我最需要的地方。

我不想设置通用的无缓存标头,因为其他浏览器会负责任地缓存,并且会提高它们的性能。

如何有选择地阻止IE将未经身份验证的重定向缓存到“登录”页面?

0 个答案:

没有答案