为什么在我期望 200 OK 时出现 302 重定向响应

Why a 302 Redirect response when I expect 200 OK

TLDR

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


我的网站运行得非常好,但留下的小问题让我感到困惑。它使用Forms认证,但是根目录下的所有文件都是不受限制的;只有一些目录在本地 web.config 中有 deny users=?。尽管如此,在登录之前无法访问根目录中的 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 在这里可能看起来很奇怪,但它多年来一直运行良好,如果查询参数中有合适的 url,它会执行 Response.Redirect("/Login.aspx")。但是我检查了 Page_Load() 中的调试器断点,在上面的问题中,未访问 Welkom.aspx.cs,因此 IIS(Expr) 不知何故直接进入 /Login.aspx ,很奇怪。

问题不在于 HTTP 如何工作,而在于我自己在 MasterPage 代码隐藏中某处调用 Response.Redirect() 的代码。当您的代码库越来越大时,就会出现此类人为错误。因此,从这个问题中没有什么技术可以学习。