使用HttpClient设置CachePolicy后未经授权的响应

时间:2017-04-25 07:48:38

标签: c# asp.net dotnet-httpclient

我正在向需要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一起发送

为什么设置缓存的想法改变了行为?

1 个答案:

答案 0 :(得分:0)

问题的根本原因是服务器正在响应

Cache-Control: private

我们的HttpClient正在缓存该响应,因此,Cache正在提供以下协商步骤,而不是向服务器请求导致无法进行身份验证。

我们在401响应中停用了缓存。 经过大量阅读后,我们决定将其作为Mozilla Developer Network州实施

Cache-Control: no-cache, no-store, must-revalidate