Dot Net HttpClient是否意外缓存了响应?

我正在尝试编写一个类似curl的工具,演示各种HTTP缓存头对dot net的HttpClient类的影响。

在我最初的尝试中,我将工具指向我的一个内部Web服务,该服务未在响应中指定任何缓存信息并检查响应的标头。

我希望每次都能重新发送请求并在服务器上执行,每次返回一组新的但相同的内容(为了进行此测试,内容在服务器上是静态的)。 但是,相反,第一个请求之后的每个请求比第一个请求返回的速度要快得多,并且包含在第一个响应中不存在的新标题Age。 这向我表明我的命令行工具中的HttpClient正在从缓存返回响应,而不是发出新请求。

这是响应头的第一个请求:

HTTP:>GET http://myserver:8058/path1/path2 Status 200 OK (OK in 00:00:00.3235905): Date = Sat, 08 Jul 2017 15:55:22 GMT Server = Microsoft-HTTPAPI/2.0 Content-Length = 150867 Content-Type = application/json; charset=utf-8 

这是我的curl工具的同一个会话的请求,不久之后:

 HTTP:>GET http://myserver:8058/path1/path2 Status 200 OK (OK in 00:00:00.0188433): Date = Sat, 08 Jul 2017 15:55:22 GMT Server = Microsoft-HTTPAPI/2.0 Age = 312 Content-Length = 150867 Content-Type = application/json; charset=utf-8 

最后,在我停止并启动我的程序后,这是来自新实例的另一个请求:

 HTTP:>GET http://myserver:8058/path1/path2 Status 200 OK (OK in 00:00:00.0517271): Date = Sat, 08 Jul 2017 15:55:22 GMT Server = Microsoft-HTTPAPI/2.0 Age = 528 Content-Length = 150867 Content-Type = application/json; charset=utf-8 

最后一个我发现更难以理解,因为我的印象(来自阅读: https : //aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ ), 每个 HttpClient 实例都维护缓存。

随着年龄增加每个请求,这似乎永远持续下去。 回到原始响应的唯一方法是使用Internet Explorer并删除临时Internet文件。

[附加信息]在我的命令行应用程序打开几个小时后,我重复了请求并收到了与原始相同的响应,没有Age标题。 所以看来,如果HttpClient缓存了响应,那么缓存会在几个小时后过期。

在这种情况下,任何人都可以告诉我HttpClient是否正确执行内部缓存,如果是这样,为什么它在没有任何与缓存相关的响应标头以及它正在使用什么策略的情况下这样做?