2017-04-25 75 views
0

我正在向请求NTLM认证的服务器发送GET请求。使用HttpClient设置CachePolicy后未经授权的响应

为此,我们设置UseDefaultCredentials = true

var defaultHandler = new WebRequestHandler 
{ 
    UseDefaultCredentials = true, 
    CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore), 
    AutomaticDecompression = DecompressionMethods.GZip, 
    AllowAutoRedirect = true, 
    UseCookies = true, 
    CookieContainer = new CookieContainer() 
}; 

一切都正常工作,直到我们决定打开缓存

为此,我们改变了我们的CachePolicyCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default)

与该改变的服务器开始与401 - unauthorized回应并正在发送旁边的WWW-Authenticate: NTLM

任何想法,为什么设置缓存改变行为?

回答

0

问题的根本原因是,服务器用

Cache-Control: private

我们HttpClient被缓存该响应,因此,下面的协商步骤正从Cache服务,而不是被请求的响应服务器导致验证失败。

我们在401响应中禁用了缓存。 大量阅读后,我们决定采用它作为Mozilla Developer Network状态

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

相关问题