我们在服务器上使用apache和NTLM:
NTLMAuth on
AuthType NTLM
AuthName "Auth"
NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
NTLMBasicAuthoritative on
require valid-user
当我们使用ajax时,这给出了一个错误,我们的大多数ajax请求在第一次尝试时失败并显示消息“401 Authorization Required”但是在自动重试时它们成功了,为什么两个请求之间存在差异?
我们的应用程序正常运行,但此错误很烦人,使用资源并减慢应用程序。
答案 0 :(得分:1)
我怀疑你实际看到的不是某种“自动重试”行为,而是challenge-response authentication of NTLM。就其性质而言,您必须为连接上的第一个请求添加额外的往返。身份验证应如下所示:
所以是的,您将使用一些额外的资源来执行NTLM身份验证(无论如何都使用基本身份验证。)但是,请注意,NTLM验证连接而不是请求。因此,通过相同的保持活动的HTTP连接的后续请求不需要重新进行身份验证。这减轻了挑战 - 反应性质的负担。
最后,请注意,大多数支持NTLM或SPNEGO的Web浏览器都是为此准备的,并将使用expect / continue。因此,他们不会在初始连接中发送POST数据(例如),直到他们通过身份验证并从服务器获得HTTP继续,这也应该减少burdern。