我很困惑time-based cache policies在使用HttpWebRequest
时如何工作。
我正在调用Web API的GET方法,该方法返回JSON内容以及类似于以下内容的Cache-Control标头:
Cache-Control: public, max-age=60
目的是在max-age
秒之后内容应该被认为是陈旧的。
我使用HttpWebRequest
调用此API,并希望后续请求从max-age
秒的本地缓存提供,然后在内容过期时从服务器检索。
我尝试了下面列出的结果的不同组合。
RequestCachePolicy
。在这种情况下,正如预期的那样,所有请求都将发送到服务器。var policy = new RequestCachePolicy(RequestCacheLevel.Default);
HttpWebRequest.DefaultCachePolicy = policy;
在这种情况下,所有请求仍然会转到服务器。我期待从缓存中为下一个max-age
秒提供请求。CacheIfAvailable
:
var policy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable);
HttpWebRequest.DefaultCachePolicy = policy;
在这种情况下,所有请求都是从本地缓存提供的,即使内容是陈旧的(即已经过了max-age秒)。有可能实现我想要的,如果是,怎么样?
除了(或代替?)Cache-Control标头之外,服务器似乎还需要add an Expires header to the response。这个答案的海报应该得到赏金。
当存在Expires标头并使用RequestCacheLevel.Default时,expiration在.NET Framework应用程序中的行为与预期相同:请求从本地缓存提供,直到达到到期时间。
但是在.NET Core应用程序中,使用相同的代码,所有请求都被发送到服务器并且不使用本地缓存:(这与我原始问题的主题是分开的,所以我有asked a new question。