我正在向需要GET
身份验证的服务器发送NTLM
请求。
为此,我们设置了UseDefaultCredentials = true
var defaultHandler = new WebRequestHandler
{
UseDefaultCredentials = true,
CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore),
AutomaticDecompression = DecompressionMethods.GZip,
AllowAutoRedirect = true,
UseCookies = true,
CookieContainer = new CookieContainer()
};
在我们决定启用缓存之前,一切正常。
为此,我们将CachePolicy
更改为CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default)
通过该更改,服务器开始响应401 - unauthorized
并与WWW-Authenticate: NTLM
一起发送
为什么设置缓存的想法改变了行为?
答案 0 :(得分:0)
问题的根本原因是服务器正在响应
Cache-Control: private
我们的HttpClient
正在缓存该响应,因此,Cache
正在提供以下协商步骤,而不是向服务器请求导致无法进行身份验证。
我们在401
响应中停用了缓存。
经过大量阅读后,我们决定将其作为Mozilla Developer Network州实施
Cache-Control: no-cache, no-store, must-revalidate