最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

对于节点HTTP2推送流,请求标头与响应标头的目的是什么?

网站源码admin19浏览0评论

对于节点HTTP2推送流,请求标头与响应标头的目的是什么?

对于节点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框的此推送请求,说“不,谢谢,我不要。”这可能是因为服务器正在推送客户端缓存中已有的资源,或者是出于其他原因。

发布评论

评论列表(0)

  1. 暂无评论