猿问

在同一资源的 http2 推送正在进行时触发 GET 请求时会发生什么

当触发单个 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 缓存:

缓存实现单写入器 - 多读取器锁定,以便在任何给定时间只有一个对同一资源的网络请求在运行。 https://www.chromium.org/developers/design-documents/network-stack/http-cache


RISEBY
浏览 97回答 1
1回答

回首忆惘然

RFC 7540 中的 HTTP/2 规范说:一旦客户端收到 PUSH_PROMISE 帧并选择接受推送的响应,在承诺的流关闭之前,客户端不应该发出任何对承诺的响应的请求。因此,如果服务器开始发送的时间不会太长,请求似乎很可能会等待推送响应被传送:如果客户端出于任何原因确定它不希望从服务器接收推送的响应,或者如果服务器花了太长时间才开始发送承诺的响应,则客户端可以使用 CANCEL 或 REFUSED_STREAM 发送 RST_STREAM 帧代码并引用推送流的标识符。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答