如何让RequestCachePolicy尊重max-age

问题描述 投票:3回答:1

我很困惑time-based cache policies在使用HttpWebRequest时如何工作。

我正在调用Web API的GET方法,该方法返回JSON内容以及类似于以下内容的Cache-Control标头:

Cache-Control: public, max-age=60

目的是在max-age秒之后内容应该被认为是陈旧的。

我使用HttpWebRequest调用此API,并希望后续请求从max-age秒的本地缓存提供,然后在内容过期时从服务器检索。

我尝试了下面列出的结果的不同组合。

  1. 不要指定RequestCachePolicy。在这种情况下,正如预期的那样,所有请求都将发送到服务器。
  2. 指定default cache policyvar policy = new RequestCachePolicy(RequestCacheLevel.Default); HttpWebRequest.DefaultCachePolicy = policy; 在这种情况下,所有请求仍然会转到服务器。我期待从缓存中为下一个max-age秒提供请求。
  3. 指定缓存策略CacheIfAvailablevar policy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); HttpWebRequest.DefaultCachePolicy = policy; 在这种情况下,所有请求都是从本地缓存提供的,即使内容是陈旧的(即已经过了max-age秒)。

有可能实现我想要的,如果是,怎么样?

.net caching httpwebrequest webrequest cache-control
1个回答
1
投票

除了(或代替?)Cache-Control标头之外,服务器似乎还需要add an Expires header to the response。这个答案的海报应该得到赏金。

当存在Expires标头并使用RequestCacheLevel.Default时,expiration在.NET Framework应用程序中的行为与预期相同:请求从本地缓存提供,直到达到到期时间。

但是在.NET Core应用程序中,使用相同的代码,所有请求都被发送到服务器并且不使用本地缓存:(这与我原始问题的主题是分开的,所以我有asked a new question

© www.soinside.com 2019 - 2024. All rights reserved.