使用NTLM避免每个请求的401响应

Sat*_*mba 28 iis ntlm iis-6 http-status-code-401

我们这里有一个使用基于NTLM的Windows身份验证的asp.net 3.5应用程序.该系统在专用网络上运行,该网络实际上分布在不同的地理位置(通过VPN连接).

我们现在正在尝试优化网站的性能.由于NTLM的工作方式,每个对IIS的新请求都由3个不同的请求组成,而前2个是401个响应.我们正在尝试将这些请求的数量最小化,仅在会话开始时.我们找到解决方案.不幸的是它并没有改变任何东西,我们继续得到这个401响应(消耗时间).

为了看到我第一次使用Fiddler应用程序的流量.不知何故,当我使用Fiddler时,在会话开始时只有一个身份验证过程(完全按照我的意愿),但当我关闭Fiddler并通过WireShark检查流量时,我可以看到每个请求仍然有401响应.

使用的客户端是IE6,IIS版本6.

有人可以提供建议吗?

Eri*_*Law 19

与所有其他HTTP身份验证方案不同,NTLM/Negotiate是面向连接的协议.

在IIS中,有各种设置控制是否要求对先前经过身份验证的连接(例如AuthPersistSingleRequest)上的所有请求进行身份验证.独立于该设置,我相信IIS会在发出POST请求时自动要求重新验证.

如果您的服务器损害连接重用(例如,通过在响应中发送Connection:close标头),则必须修复该问题,否则将发生重新认证.您可以使用Fiddler轻松检查此类身份验证 - 重用欺骗标头.

  • 我的结论是:没办法完全摆脱NTLM的401s(除了前两个).它们将始终在使用POST方法时返回,同样在使用Web服务时 - 创建与IIS的新连接,在那里,将发生新的身份验证过程(产生2个以上的401). (3认同)
  • 来自Eric本人的回应+1.我想亲自感谢你创造出梦幻般的提琴手.它使我对HTTP的理解更好,并使我和许多其他更好的Web开发人员:) (2认同)