我们在 IIS7 上有一个包含“hello world”.html 文件的互联网网站,并且已启用 Windows 身份验证。用户是 Web 服务器上的本地计算机 Windows 用户。对于某些用户来说,该网站非常慢。使用 fiddler2,我将其追踪到浏览器连接和浏览器开始初始 GET 请求之间的 15 秒延迟:
ACTUAL PERFORMANCE
--------------
ClientConnected: 15:28:09.737
ClientBeginRequest: 15:28:24.750
ClientDoneRequest: 15:28:24.750
...
然后,网站以 HTTP 401 进行响应,浏览器立即以第二个 GET 请求(可能带有相关的身份验证令牌)进行响应,该请求立即返回 HTTP 200。
无论我从哪台机器访问它,都会发生此问题。不过,此问题仅出现在 IE(v6 - v8)中,Firefox 和 Chrome 运行正常。
在我的计算机上,使用站点的 IP 地址而不是 DNS 名称可以解决问题,但这并不能解决其他人的问题。
我尝试过更改配置本文,但并没有修复问题。
有任何想法吗?
答案1
我的客户也遇到过类似的情况。域控制器配置错误(在 NT4 模式下),并且 IE 选中了“启用 Windows 集成安全性”选项。
在 Windows 集成安全模式下,IE 会尝试使用 Windows 2000+ 模式 AD/Kerberos 票证发送请求。当 Web 服务器无法验证票证时,它会返回 NTLM。
您有 3 个选择。
- 找出 AD 设置中存在的问题。可能是您的域控制器都很好,但您的 Web 服务器出了问题。这篇知识库文章很旧,但可能会有所帮助http://support.microsoft.com/kb/326985。
- 将 IIS 切换为仅 NTLM 模式。您将要破解元数据库才能执行此操作。实际上,这很容易做到,但如果没有必要,您不会想使用 NTLM,因为它比 Kerberos 更慢且更不安全。
- 清除 IE 中的“Windows 集成安全性”复选框。您实际上也不想这样做,因为它会破坏网络上的其他 Web 应用程序。
不幸的是,就我的情况而言,由于涉及到自尊心,我不得不选择选项 2,但是它的效果非常好。
答案2
只是在这里大声思考,但客户端计算机是在域中还是在工作组中?
(是的,如果我有代表这个会发表评论!