302无限循环

Joh*_*arr 6 asp.net iis-7 infinite-loop http-status-code-302

我有一个陷入无限循环的Web应用程序,我不知道接下来要去哪里看.这是一个内部网站点,所以没有我可以分享的链接,但我已经列出了我能想到的许多细节.我将不胜感激任何想法或建议.任何人都有.

细节:

  • IIS 7
  • .Net 4.0
  • Windows 2008
  • 默认文档是Login.aspx
  • 在app上没有设置HTTP重定向,在IIS中没有设置Login.aspx
  • Fiddler使用状态代码302显示Login.aspx并重定向到Login.aspx

如果我打开我的网站,它指向Login.aspx并陷入302循环.如果我打开网站但指向register.aspx,Fiddler会将register.aspx显示为Login.aspx,当然会重定向到Login.aspx.

我做了什么:

  • 从Visual Studio运行webapp - 一切正常
  • 检查web.config是否有重定向命令 - 没有
  • 检查IIS是否有重定向命令 - 没有
  • 看看Fiddler在循环中的另一个页面 - 没有,只​​有Login.aspx到Login.aspx
  • 检查Login.aspx是否有重定向命令 - 没有
  • 检查重定向命令后面的Login.aspx代码 - 没有
  • 使用服务器上的web.config在我的盒子上运行应用程序 - 一切正常
  • 检查Login.aspx是否有重定向命令 - 没有
  • 清除缓存 - 问题仍然存在
  • 重新发布 - 问题仍然存在
  • 重新发布和清除缓存 - 问题仍然存在
  • IIS中禁用默认文档

Pad*_*ddy 5

将分享这个以防万一这是一个答案,因为这听起来像是我们遇到的问题。

  1. ASP.net MVC 站点[RequiresHttps]在我们的登录操作上具有属性。

  2. 在进行 SSL 加速的负载均衡器后面(导致实际命中服务器端代码的请求已被解码并在 http 下有效)。

  3. 服务器代码认为这是一个问题,并使用 https 重定向回自身。

  4. 冲洗并重复。


自从回答这个问题以来已经很长一段时间了,我在下面的评论“不使用 RequireHttps”可能有点过时了。

任何看到这个答案并认为它解决了他们的问题的人都可能会被强烈建议考虑配置他们的负载均衡器以使用 X-Forwarded-Proto 标头:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto

然后设置他们的 MVC 站点,以便能够读取这些内容,并且仍然认为它们位于环境边界的 HTTPS 下:

https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-6.0


Joh*_*arr 2

发现问题了。在MasterPage中发现这个逻辑:

Dim strPage As String = Request.Url.AbsolutePath.Replace("/", "")
    'Check that user is logged in
    If Not strPage = "Login.aspx" And Not strPage = "Register.aspx" Then
        If Session("intUserId") Is Nothing Then
            Response.Redirect("~/Login.aspx", True)
        End If
    End If
Run Code Online (Sandbox Code Playgroud)

显然,当浏览到服务器上的 Login.aspx 时,strPage 不等于 Login.aspx。

我在调查的时候就应该把这个问题说出来。感谢罗斯的评论,它帮助我找到了这个!