通过 React Native 将 must-revalidate 与 NSURLSession 一起使用
Using must-revalidate with NSURLSession through React Native
在示例演示应用程序中,我使用 React Native 进行网络调用。在底层,React Native 使用 NSURLSession
和 NSURLRequestUseProtocolCachePolicy
作为默认缓存策略。进行网络调用时,服务返回的响应包含这些缓存控件 headers:
public, max-age=10, must-revalidate
我能注意到的是,如果 max-revalidate
存在,NSURLSession
不遵守 10
秒。相反,如果在 10
秒内进行新的网络调用时后者不存在,则返回缓存响应,否则进行新的调用。
根据 14.9.4 Cache Revalidation and Reload Controls 部分,这不应该是预期的行为,但也许我错了。
Because a cache MAY be configured to ignore a server's specified
expiration time, and because a client request MAY include a max- stale
directive (which has a similar effect), the protocol also includes a
mechanism for the origin server to require revalidation of a cache
entry on any subsequent use. When the must-revalidate directive is
present in a response received by a cache, that cache MUST NOT use the
entry after it becomes stale to respond to a subsequent request
without first revalidating it with the origin server. (I.e., the cache
MUST do an end-to-end revalidation every time, if, based solely on the
origin server's Expires or max-age value, the cached response is
stale.)
我发现了关于这个主题的有用讨论:。根据讨论,协议似乎有点
ambiguous here, but in practice I have found that must-revalidate
means it must revalidate regardless of max-age.
一件非常奇怪的事情是,如果我对 Android 做同样的事情,同时使用 max-age
和 must-revalidate
,行为是正确的。 10
秒后将发出新请求。在 10
秒内没有请求。
有线索吗?
我做了一些测试,似乎在 iOS(使用 NSURLSession)中每当设置 must-revalidate
时,max-age
都没有被考虑在内。 Android 的情况不同,这两个值可以一起使用。
P.S。如果 HTTP 协议方面的专家有这方面的线索,请告诉我。
在示例演示应用程序中,我使用 React Native 进行网络调用。在底层,React Native 使用 NSURLSession
和 NSURLRequestUseProtocolCachePolicy
作为默认缓存策略。进行网络调用时,服务返回的响应包含这些缓存控件 headers:
public, max-age=10, must-revalidate
我能注意到的是,如果 max-revalidate
存在,NSURLSession
不遵守 10
秒。相反,如果在 10
秒内进行新的网络调用时后者不存在,则返回缓存响应,否则进行新的调用。
根据 14.9.4 Cache Revalidation and Reload Controls 部分,这不应该是预期的行为,但也许我错了。
Because a cache MAY be configured to ignore a server's specified expiration time, and because a client request MAY include a max- stale directive (which has a similar effect), the protocol also includes a mechanism for the origin server to require revalidation of a cache entry on any subsequent use. When the must-revalidate directive is present in a response received by a cache, that cache MUST NOT use the entry after it becomes stale to respond to a subsequent request without first revalidating it with the origin server. (I.e., the cache MUST do an end-to-end revalidation every time, if, based solely on the origin server's Expires or max-age value, the cached response is stale.)
我发现了关于这个主题的有用讨论:。根据讨论,协议似乎有点
ambiguous here, but in practice I have found that must-revalidate means it must revalidate regardless of max-age.
一件非常奇怪的事情是,如果我对 Android 做同样的事情,同时使用 max-age
和 must-revalidate
,行为是正确的。 10
秒后将发出新请求。在 10
秒内没有请求。
有线索吗?
我做了一些测试,似乎在 iOS(使用 NSURLSession)中每当设置 must-revalidate
时,max-age
都没有被考虑在内。 Android 的情况不同,这两个值可以一起使用。
P.S。如果 HTTP 协议方面的专家有这方面的线索,请告诉我。