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

时间:2019-03-26 16:28:06

标签: asp.net web-config forms-authentication iis-express

TLDR

我受雇维护的网站在两个地方处理安全性:web.config表单身份验证,以及通过检查MasterPage后面代码中的Session 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,非常奇怪。

1 个答案:

答案 0 :(得分:0)

问题不在于HTTP的工作原理,而在于我自己在MasterPage代码中位于Response.Redirect()后面的代码。当您的代码库越来越大时,这种人为错误就会蔓延。因此,从这个问题上没有什么技术可学。