我已经阅读了有关缓存控制HTTP标头的优秀文章:https://www.mnot.net/cache_docs/#CACHE-CONTROL
我想知道以下标题会发生什么:
Cache-Control: no-store, public
公共标题是否优先于no-store标题,反之亦然?
优先级的标题会因浏览器而异吗?
我理解同时拥有无存储和公共Cache-Control标头可能并不可取,但为了论证,如果它们都存在会发生什么。
提前感谢任何指导。
答案 0 :(得分:2)
从下面的Google Chrome Browser查找有关此问题的一些主要代码。
isPubliclyCacheable: function(resource)
{
if (this._isExplicitlyNonCacheable(resource))
return false;
if (this.responseHeaderMatch(resource, "Cache-Control", "public"))
return true;
return resource.url.indexOf("?") == -1 && !this.responseHeaderMatch(resource, "Cache-Control", "private");
}
_isExplicitlyNonCacheable: function(resource)
{
var hasExplicitExp = this.hasExplicitExpiration(resource);
return this.responseHeaderMatch(resource, "Cache-Control", "(no-cache|no-store|must-revalidate)") ||
this.responseHeaderMatch(resource, "Pragma", "no-cache") ||
(hasExplicitExp && !this.freshnessLifetimeGreaterThan(resource, 0)) ||
(!hasExplicitExp && resource.url && resource.url.indexOf("?") >= 0) ||
(!hasExplicitExp && !this.isCacheableResource(resource));
}
根据代码,一些指令的优先级高于另一个指令,其中“no-store”就是其中之一(Cache-Control:“public,no-store”或“no-store,public”) )no-store将获得更高的优先级。
答案 1 :(得分:1)
通过the RFC 7234。给出:
Cache-Control: no-store, public
no-store
是响应缓存控制指令(RFC 7234, Section 5.2.2)。它声明不应存储响应。
public
是扩展程序。
可以通过使用一个来扩展Cache-Control头字段 或更多缓存扩展令牌,每个令牌都有一个可选值。缓存 必须忽略无法识别的缓存指令。
由于public
不是no-store
的已知扩展名,因此会被忽略。
答案 2 :(得分:0)
我已经缩短了HTTP缓存规范中与您的用例有关的部分(请参见https://tools.ietf.org/html/rfc7234#section-3):
缓存不得存储对任何请求的响应,除非:
“不存储” 缓存指令(请参阅第5.2节)未出现 在请求或响应标题字段中,和
响应之一:
包含一个缓存控制扩展(请参阅第5.2.3节),该扩展 允许将其缓存或包含公共响应指令(请参见5.2.2.5节)。
包含一个 public 响应指令(请参见第5.2.2.5节)。
简而言之,no-store
的优先级高于public
。