如何让 RequestCachePolicy 遵守 max-age
How to get RequestCachePolicy to respect max-age
我对使用 HttpWebRequest
时 time-based cache policies 的工作方式感到困惑。
我正在调用 WebAPI 的 GET 方法 returns JSON 内容连同 Cache-Control header 类似于:
Cache-Control: public, max-age=60
目的是内容应在 max-age
秒后被视为陈旧。
我正在使用 HttpWebRequest
调用此 API,并希望后续请求从本地缓存提供 max-age
秒,然后在内容时从服务器检索过期。
我尝试了不同的组合,结果如下。
不要指定 RequestCachePolicy
。在这种情况下,正如预期的那样,所有请求都会转到服务器。
指定一个default cache policy:
var policy = new RequestCachePolicy(RequestCacheLevel.Default);
HttpWebRequest.DefaultCachePolicy = policy;
在这种情况下,所有请求仍会转到服务器。我期待在接下来的 max-age
秒内从缓存中为请求提供服务。
指定缓存策略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.
我对使用 HttpWebRequest
时 time-based cache policies 的工作方式感到困惑。
我正在调用 WebAPI 的 GET 方法 returns JSON 内容连同 Cache-Control header 类似于:
Cache-Control: public, max-age=60
目的是内容应在 max-age
秒后被视为陈旧。
我正在使用 HttpWebRequest
调用此 API,并希望后续请求从本地缓存提供 max-age
秒,然后在内容时从服务器检索过期。
我尝试了不同的组合,结果如下。
不要指定
RequestCachePolicy
。在这种情况下,正如预期的那样,所有请求都会转到服务器。指定一个default cache policy:
var policy = new RequestCachePolicy(RequestCacheLevel.Default); HttpWebRequest.DefaultCachePolicy = policy;
在这种情况下,所有请求仍会转到服务器。我期待在接下来的
max-age
秒内从缓存中为请求提供服务。指定缓存策略
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.