是否可以使用HTTP / 2进行缓存清除?

时间:2015-08-21 06:55:17

标签: caching http2 http2-lawyers

有人试过吗?

这是用例。在第一个请求 - 响应周期中,会发生这种情况:

请求1:

GET / HTTP/1.1
...

回应1

HTTP/1.0 200 OK
Etag: version1
Cache-control: max-age=1

... angly html here
....<link href="mycss.css" >
...

请求2:

GET /mycss.css HTTP/1.1
...

回应2(可能推动):

Etag: version1
Cache-control: max-age=<duration-of-the-universe>

...
... brackety css ...
...

然后,当浏览器第二次进入同一页面时,由于max-age非常短,它当然会再次获取“/”资源:

GET / HTTP/1.1
...
If-not-modified: version1

但是如果它在缓存中有它,它将不会获取mycss.css。但是,服务器可以使用“/”请求的“if-not-modified”标头中的验证器来了解客户端的缓存时间,并可能得出结论,mycss.css版本的浏览器太旧了。在这种情况下,在回复上一个请求之前,服务器可以"promise"新版本的mycss.css /

根据规范,浏览器是否应该接受并使用它?

1 个答案:

答案 0 :(得分:2)

概述:

我仍然不知道我的问题的答案来自纯粹的理论方面,但至少在今天,在实践中似乎不可能以这种方式进行缓存破坏:-(,既没有Google Chrome,也没有Firefox。如果他们认为缓存中的资源是新鲜的,则拒绝或忽略推送的流。

我也是从那些喜欢保持匿名的人那里得到的:

  

浏览器通常会将通过推送接收的资源放入a   “非军事区”,只有客户要求提供该资源   它将被移动到实际的缓存中。所以只是推动随机   事情不会使他们最终在浏览器缓存中,即使   浏览器会在推动时接受它们。

更新

到2016年初,仍然不可能,主要是由于对如何处理这一问题缺乏共识,以及是否应该允许这样做。 作为this page shows,即使使用HTTP / 2,解决陈旧资产问题的方法是为每个资产版本创建一个唯一的URL,然后确保用户在重新访问该页面时收到该新URL。