首页 > 解决方案 > 当我期望 200 OK 时为什么会出现 302 重定向响应

问题描述

TLDR

我受雇维护的网站在两个地方处理安全性:web.config 表单身份验证,以及通过检查 MasterPage 中代码隐藏中的会话 cookie。因此,更改安全细节,例如使某些页面无需登录即可访问,需要在both某些地方进行更改。忘记一个,网络开发工具中会发生奇怪的事情......


我的网站运行良好,但留下的小问题让我感到困惑。它使用Forms身份验证,但根目录下的所有文件都不受限制;只有一些目录deny users=?在本地 web.config 中。尽管如此,在登录之前无法访问根目录中的 asp 页面,并以302 Found, Redirect.

这是根目录中 web.config 的一部分:

<authentication mode="Forms">
  <forms name="MYWEBAPP.ASPXAUTH" loginUrl="~/Welkom.aspx"
    protection="All" timeout="181" slidingExpiration="true" path="/"/>
</authentication>

并且没有<authorization>部分。

应该允许用户在登录之前访问 /Cookies.aspx 之类的页面,但是使用 FireFox F12 开发工具的选项卡网络,我看到响应为 302,然后重定向到 /Login.aspx。

这导致两个问题:

  1. 为什么是 302,而不是简单的 200 OK 并显示 Cookies 页面?
  2. 为什么要去 /Login.aspx 而不是 /Welkom.aspx?

我承认 Welkom.aspx 在这里可能看起来很奇怪,但它多年来一直运行良好,并且Response.Redirect("/Login.aspx")如果查询参数中有一个合适的 url,它就会起作用。但是我检查了 Page_Load() 中的调试器断点,在上述问题中,Welkom.aspx.cs 没有被访问,所以 IIS(Expr) 不知何故直接进入 /Login.aspx,很奇怪。

标签: asp.netweb-configforms-authenticationiis-express

解决方案


问题不在于 HTTP 是如何工作的,而在于我自己在 MasterPage 代码隐藏中的某处称为 Response.Redirect() 的代码。当你的代码库变得越来越大时,这种人为错误就会蔓延。所以从这个问题中没有什么技术可以学习的。


推荐阅读