目的是什么?"/>
对于节点HTTP2推送流,请求标头与响应标头的目的是什么?
当节点HTTP2服务器创建新的推送流时,请求标头与响应标头的目的是什么?
服务器代码:
http2Server.on('stream', (stream) => {
stream.pushStream({ ':path': '/' }, (err, pushStream, headers) => { // send request headers
pushStream.respond({ ':status': 200 }); // send response headers
pushStream.end('some pushed data');
});
stream.end('some data');
});
客户代码:
clientHttp2Session.on('stream', (pushedStream, requestHeaders) => { // receive request headers
pushedStream.on('push', (responseHeaders) => { // receive response headers
/* Process response headers */
});
pushedStream.on('data', (chunk) => { /* handle pushed data */ });
});
这两个都必须在发送任何数据之前发送,因此似乎其中之一是多余的?
MDN状态:
请求标头包含有关要获取的资源或有关请求资源的客户端的更多信息。
Response标头包含有关响应的其他信息,例如响应的位置或提供响应的服务器。
但是,这似乎倾向于更多的客户端请求,即服务器响应模型-不适用于推送。
回答如下:您所称的“请求标头”映射到HTTP / 2(PUSH_PROMISE
)中的PUSH_PROMISE
帧。
you can see this in the NodeJS source code帧在PUSH_PROMISE
中定义,用于告诉客户端“嘿,我要假装您发送了此请求,然后向您发送对该“伪请求”的响应。”] >
用于通知客户此响应正在进行中,如果需要它,那么就不必费心提出另一个请求。
[它还允许客户端取消带有HTTP/2 spec框的此推送请求,说“不,谢谢,我不要。”这可能是因为服务器正在推送客户端缓存中已有的资源,或者是出于其他原因。
更多推荐
对于节点HTTP2推送流,请求标头与响应标头的目的是什么?
发布评论