Javascript 在同一资源的http2推送过程中触发GET请求时会发生什么情况

Javascript 在同一资源的http2推送过程中触发GET请求时会发生什么情况,javascript,http,browser,http2,server-push,Javascript,Http,Browser,Http2,Server Push,当触发单个GET请求时,同时对同一资源进行http2推送时会发生什么情况 指定的行为是什么?浏览器实际做什么 示例场景可能如下所示: at time 0: GET / (get document) and the server pushes /data.json at time 1: GET /data.json (triggered by script, while the h2 push is still not finished / in-flight) 这会导致对服务器的两次调用吗?是

当触发单个GET请求时,同时对同一资源进行http2推送时会发生什么情况

指定的行为是什么?浏览器实际做什么

示例场景可能如下所示:

at time 0: GET / (get document) and the server pushes /data.json
at time 1: GET /data.json (triggered by script, while the h2 push is still not finished / in-flight)
这会导致对服务器的两次调用吗?是否指定了此行为或特定于浏览器,例如在Chromium中,可能通过HTTP缓存:

缓存实现了一个单写多读锁定,因此在任何给定的时间内,只有一个针对同一资源的网络请求处于运行状态。


RFC 7540中的HTTP/2规范:

一旦客户收到PUSH_承诺框架并选择接受 推送响应时,客户端不应发出任何请求 承诺流关闭之前的承诺响应

因此,如果服务器开始发送的时间不太长,则请求可能会等待推送响应的发送:

如果客户出于任何原因确定其不希望
从服务器接收推送响应,或者如果服务器接收
太长
无法开始发送承诺的响应,客户端可以发送
使用取消或拒绝流代码的RST\u流帧
以及引用推送流的标识符