如何让 RequestCachePolicy 遵守 max-age

How to get RequestCachePolicy to respect max-age

我对使用 HttpWebRequesttime-based cache policies 的工作方式感到困惑。

我正在调用 WebAPI 的 GET 方法 returns JSON 内容连同 Cache-Control header 类似于:

Cache-Control: public, max-age=60

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

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

我尝试了不同的组合,结果如下。

  1. 不要指定 RequestCachePolicy。在这种情况下,正如预期的那样,所有请求都会转到服务器。

  2. 指定一个default cache policy:

    var policy = new RequestCachePolicy(RequestCacheLevel.Default);
    HttpWebRequest.DefaultCachePolicy = policy;
    

    在这种情况下,所有请求仍会转到服务器。我期待在接下来的 max-age 秒内从缓存中为请求提供服务。

  3. 指定缓存策略CacheIfAvailable:

    var policy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable);
    HttpWebRequest.DefaultCachePolicy = policy;
    

    在这种情况下,所有请求都从本地缓存提供服务,即使内容已过时(即 max-age 秒已经过去)。

是否可以实现我想要的,如果可以,如何实现?

服务器似乎有必要 add an Expires header to the response 除了(或代替?) Cache-Control header。该答案的发布者值得赏金。

当存在 Expires header 并使用 RequestCacheLevel.Default 时,过期在 .NET Framework 应用程序中的行为与预期一致:请求从本地缓存提供服务,直到达到过期时间.

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