了解HTTP2服务器推送和多路复用

据我了解,多路复用意味着客户机只需要与服务器建立一个TCP连接,它就可以同时发送多个请求,而不必等待一个请求的响应再继续另一个请求。因此,如果我同时发送3个请求,那么也会有3个响应流。

对于服务器推送,客户端将一个请求发送到服务器,然后服务器猜测客户端需要除请求的资源以外的其他资源(也称为promise),因此它发送推送承诺流,向客户端暗示附加资源的URL。客户端可以选择是否请求那些额外的资源。

我的问题是:

  
      
  1. 对于从服务器发送到客户端的任何响应,是否必须首先发起请求?我的意思是,我创建了与   服务器,我没有发送任何请求。我能得到回应吗   从服务器通过服务器推送?在多路传输中,我得到相同数量的   相同数量请求的响应。在服务器推送中,我可以获得   一个请求有多个响应。所以总是必须有一个   首先请求?
  2.   
  3. 在服务器推送中,当服务器将承诺流包含其他资源的URL发送到客户端时,是否表示   服务器仅在以下情况下才会推送其他资源:   客户接受诺言?
  4.   
duolaimix 回答:了解HTTP2服务器推送和多路复用

  

[服务器]发送推送承诺流,以其他资源的URL提示客户端。客户端可以选择是否请求那些额外的资源。

这是不正确的。当服务器向客户端发送PUSH_PROMISE时,服务器将发送与该推送资源关联的资源内容。 客户端唯一可以做的就是通过RST_STREAM帧重置推送的流,但是很可能是整个推送资源已经在运行中,因此重置推送的流没有任何效果:客户端将接收推送的资源字节,如果不感兴趣,可以丢弃它们。

要回答您的特定问题:

  1. 是的,来自服务器的响应始终是客户端发起的。如果客户端没有向服务器发送任何请求,则服务器无法推送到客户端。即使在服务器推送的情况下,客户端也始终通过发出请求来启动流,并且服务器推送始终与该“父”请求相关联。

  2. PUSH_PROMISE帧是从服务器到客户端的指示,表示服务器将要推送什么资源。客户端不“接受”推送,服务器将其强制发送给客户端。客户端唯一能做的就是重置与推送资源关联的流;如我所说,服务器从客户端接收到RST_STREAM帧时可能已经推送了整个资源。

本文链接:https://www.f2er.com/3123847.html

大家都在问