是否可以在已提供请求的内容后将内容推送到客户端?
This Wikipedia article解释了帧的顺序如下:
- 服务器接收HEADERS帧,询问流3中的index.html ...
- 服务器为styles.css发送PUSH_PROMISE,为script.js发送PUSH_PROMISE,再次在流3中发送...
- 服务器在流3中发送HEADERS帧以响应对index.html的请求。
- 服务器发送带有index.html内容的DATA帧,仍在第3流中。
- 服务器发送HEADERS帧以响应第4流中的styles.css
- 服务器发送HEADERS帧以响应流6中的script.js。
- 服务器使用各自的流号为styles.css和script.js的内容发送DATA帧。
醇>
我想知道,例如,我是否可以保持开放流3,之后我发送了index.html的DATA帧,然后发送了PUSH_PROMISE帧。
感谢您的回复:)
答案 0 :(得分:1)
是否可以在已提供请求的内容后将内容推送到客户端?
我认为答案是' no',基于 6.6。 RFC 7540中的PUSH_PROMISE 。这里是相关的引用(强调我的):
PUSH_PROMISE帧必须仅在对等发起的流上发送 在" open"中的或"半封闭(远程)"状态即可。该 PUSH_PROMISE帧的流标识符表示它的流 与....关联。如果流标识符字段指定了 值0x0,收件人必须响应连接错误 (PROTOCOL_ERROR类型的(第5.4.1节)。
回到你的问题:
我想知道,例如,我是否可以保持开放流3,之后我发送了index.html的DATA帧,然后发送了PUSH_PROMISE帧。
以下是我认为你可以做的事情:你可以发送所有DATA
帧for stream 3 但保留END_STREAM
标志因此保持(这意味着客户端仍在等待内容)。然后发送PUSH_PROMISE
,然后发送一个空的(零长度)DATA
帧,并在第3行设置END_STREAM
。我无法想到一个有用的场景,但是。