我有一个大型内部企业基于Web的应用程序在IIS6上运行ASP.NET 3.5的情况,生成401"未授权"响应,然后是200"Ok"响应(由Fiddler描述).我知道为什么会发生这种情况(集成auth强制浏览器重新发送凭据)但我正在寻找一些关于如何最小化或根除情况的想法.有问题的应用程序在WAN中运行,一些用户遇到的延迟时间高达250毫秒,因此强制后续请求会对页面加载时间产生明显影响,尤其是当页面上有许多级联下拉列表时.
应用程序的用户是托管桌面环境内部的,因此从部署的角度来看,可以强制浏览器在第一个请求上发送凭据(这是否可能?).这适用于需要用户身份但不需要身份验证的资源(WebResource.axd,ScriptResource.axd和一些自定义Web服务)的页面,允许匿名身份验证.我已经看过在web.config中基于每个位置定义这个,但是结果是混合的(仍然有许多401响应).
对于处理这种情况的"最佳实践",我很感激.有很多资源可以识别问题,但我找不到提供可行解决方案的资源.
谢谢!
编辑:可以通过向Web配置添加位置条目匿名请求不需要身份验证的资源(即用于级联下拉列表的Web服务),但我还没有找到经过身份验证的资源的答案.
不幸的是,这是HTTP NTLM身份验证方案的工件.
简而言之,浏览器(Internet Explorer或其他)不知道它需要进行身份验证,直到它被包含WWW-Authenticate
响应头的401响应反弹.
在WWW-Authenticate: NTLM
- 令人讨厌的情况下- 它需要在单个持久连接上完成两个 401响应,并且一旦HTTP持久连接关闭就必须重复此过程.因此,即使您能够让浏览器发起盲目尝试NTLM的请求,也不能从事务中删除至少一个401响应.
我认为最好的办法是最大限度地延长持久连接在空闲时保持打开的时间.