28

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

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

为了查看流量,我首先使用了 Fiddler 应用程序。不知何故,当我使用 Fiddler 时,会话开始时只有 1 个身份验证过程(完全如我所愿),但是当我关闭 Fiddler 并通过 WireShark 检查流量时,我可以看到每个请求我仍然有这个 401 响应.

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

有人可以建议吗?

4

7 回答 7

21

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

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

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

于 2009-08-03T15:07:57.407 回答
4

唯一的方法是仅在登录页面上使用 NTLM 并像这里一样使用 cookie

于 2009-08-06T14:09:57.187 回答
3

关于相关主题;如果您使用的是 IIS7.0 和 kerberos 身份验证,则可以使用 AuthPersistNonNTLM=true 来避免每个请求的 401 往返。

http://msdn.microsoft.com/en-us/library/aa347548(VS.90).aspx

http://blogs.technet.com/b/configurationmgr/archive/2010/06/03/solution-you-may-experience-slow-performance-when-using-bits-and-kerberos-authentication-on-configmgr- 2007-distribution-points.aspx

于 2010-08-12T08:48:04.150 回答
3

您是否在您的域中尝试过此操作?

setspn -a FQDNServerName applicationPoolServiceAccount
setspn -a biosServerName applicationPoolServiceAccount

它允许应用程序池为 NTLM 身份验证请求提供服务。

于 2011-03-10T23:38:10.687 回答
2

这可能是您在 IE6 上为该站点设置的安全设置。尝试更改为本地 Intranet 或受信任的站点。

于 2009-08-03T14:06:46.210 回答
1

我有完全一样的问题!我正在使用与您相同的环境。除了我在 Fiddler 中也看到了 2 401。我在这个问题上花了几天时间,然后就放弃了。AuthPersistence 对我也不起作用。但这是我找到的链接,也许它们适用于您的情况。

http://msdn.microsoft.com/en-us/library/ms525244.aspx

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/b0b4ec5c-74f8-43e9-ac64-d8b852568341.mspx?mfr=true

http://technet.microsoft.com/en-us/library/cc786094.aspx

http://technet.microsoft.com/en-us/library/cc781339(WS.10).aspx

我尝试在虚拟目录和网站级别设置标志,但没有帮助。您是否使用 IIS 元数据库资源管理器来编辑这些属性?它是编辑属性的更简洁的方法,并且可能比直接编辑 XML 文件更有帮助。

避免该问题的一种方法是在 HTTP 响应中插入 Cache-Control 标头,用于在任何页面上不会频繁更改的资源。就我而言,我缓存了 css(尽可能使用外部 css 来优化)、js 和 img 文件。由于我在我们的主页上加载了大约 60 个此类文件,因此我们能够立即消除大约 120 401 个错误!

确保使用 Cache-Control 标头而不是 if-modified 或基于 e-tag 的缓存,即使文件被缓存,仍然会生成 401 和 304。

于 2009-08-06T14:28:44.633 回答
0

我也遇到了这个问题,除了对我来说,主要是 JS 和 CSS 文件导致了这个问题。我的网站(像大多数网站一样)将 JS 和 CSS 文件保存在自己的目录中。所以对我来说,解决方案是简单地转到 IIS 中的那些目录并启用 Anon Auth(我说的很简单,但我花了两年多的时间才解决这个问题;感谢这篇文章)。现在该站点仍然需要 Windows 身份验证,但 JS 和 CSS 文件的子目录不需要。IOW,它似乎工作得很好。

我也永远不会将敏感信息放入 JS 文件(或 CSS 文件)中,并且建议您也不要这样做。如果这样做,您显然希望将这些文件中的敏感信息移出这些目录。

于 2017-08-11T20:27:47.537 回答