gpt4 book ai didi

server-push - 当资源在缓存中时,浏览器是否会取消服务器推送?

转载 作者:行者123 更新时间:2023-12-03 01:35:19 33 4
gpt4 key购买 nike

HTTP/2 规范表明,如果客户端取消 PUSH_PROMISE 帧中标识的任何资源,则不会推送该资源。

当浏览器检测到缓存中已有资源时,它应该取消对该资源的推送。但是,我不知道浏览器如何检测它。框架是否提供附加信息(例如 etag 或上次修改时间),以允许浏览器检测是否必须逐出任何缓存条目或是否可以取消推送?

如果可能的话,可以节省一些带宽。然而,服务器推送似乎会损害任何客户端缓存优化。

最佳答案

在 HTTP/2 中,服务器通过 PUSH_PROMISE 帧向客户端推送对资源的请求

从服务器到客户端时,这不是响应,而是请求,即客户端为获取该资源而发出的请求。

当客户端收到 PUSH_PROMISE 时,它可以查看 URI,并找出该资源的缓存状态。浏览器通常对正常接收的资源和推送的资源使用不同的缓存。如果缓存仍然有效,客户端可以通过向该流的服务器发送 RST_STREAM 帧来取消推送的流。

同时,服务器开始推送资源。这将生成一个 HEADERS 响应帧,其中包含典型的响应 header ,例如 etag。当客户端收到 HEADERS 响应帧时,它还有一次取消流的机会,当然,数据帧可能正在传输,也可能全部传输。

节省带宽可能很有趣,但浪费一点带宽通常不是问题;从用户体验的角度来看,更重要的是延迟,而推送机制大大降低了延迟。

我认为推送机制不会损害任何客户端缓存优化;如果是这种情况,浏览器供应商将会反对此功能,而大多数浏览器供应商(如果不是全部)都在实现该功能后,在用户体验和减少延迟方面取得了非常好的效果。

当然,该机制可以改进,例如让客户端和服务器就某些 header 达成一致,该 header 将提供有关正在推送的资源的更多信息,但到目前为止效果还不错。

[免责声明:我是 Jetty 提交者]almost 3 years ago 是第一个为 Java 生态系统 ( Jetty Project ) 实现 SPDY 和 HTTP/2 Push 的公司。肯定对more discussions and ideas感兴趣围绕 HTTP/2 推送。

关于server-push - 当资源在缓存中时,浏览器是否会取消服务器推送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352282/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com