我正在向期望NTLM
身份验证的服务器发送GET
请求。
为此,我们设置了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
有什么想法为什么设置缓存改变行为?
问题的根本原因是服务器正在响应
Cache-Control: private
我们的HttpClient
正在缓存该响应,因此,正在从Cache
提供以下协商步骤,而不是被请求到无法进行身份验证的服务器。
我们在401
响应上禁用缓存。经过大量阅读,我们决定将其作为Mozilla开发人员网络国家
Cache-Control: no-cache, no-store, must-revalidate