RISEBY
2023-02-24 15:21:44
當(dāng)觸發(fā)單個(gè) GET 請(qǐng)求時(shí)會(huì)發(fā)生什么,同時(shí)正在為同一資源發(fā)送 http2 推送?指定的行為是什么以及瀏覽器實(shí)際做什么?示例場(chǎng)景可能如下所示: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)這會(huì)導(dǎo)致兩次調(diào)用服務(wù)器嗎?這種行為是指定的還是特定于瀏覽器的,例如在 Chromium 中可能通過(guò) HTTP 緩存:緩存實(shí)現(xiàn)單寫入器 - 多讀取器鎖定,以便在任何給定時(shí)間只有一個(gè)對(duì)同一資源的網(wǎng)絡(luò)請(qǐng)求在運(yùn)行。 https://www.chromium.org/developers/design-documents/network-stack/http-cache
1 回答
回首憶惘然
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
RFC 7540 中的 HTTP/2 規(guī)范說(shuō):
一旦客戶端收到 PUSH_PROMISE 幀并選擇接受推送的響應(yīng),在承諾的流關(guān)閉之前,客戶端不應(yīng)該發(fā)出任何對(duì)承諾的響應(yīng)的請(qǐng)求。
因此,如果服務(wù)器開(kāi)始發(fā)送的時(shí)間不會(huì)太長(zhǎng),請(qǐng)求似乎很可能會(huì)等待推送響應(yīng)被傳送:
如果客戶端出于任何原因確定它不希望
從服務(wù)器接收推送的響應(yīng),或者如果服務(wù)器花了
太長(zhǎng)時(shí)間才開(kāi)始發(fā)送承諾的響應(yīng),則客戶端可以
使用 CANCEL 或 REFUSED_STREAM 發(fā)送 RST_STREAM 幀代碼
并引用推送流的標(biāo)識(shí)符。
添加回答
舉報(bào)
0/150
提交
取消
