使用HTTPCLIENT设置Cachepolicy后,未经授权的响应



我正在向期望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

最新更新