HTTP 2将支持服务器推送,这是什么意思?

时间:2013-01-30 13:31:04

标签: server-push http2

我已经阅读了很多关于HTTP 2(仍处于开发阶段)的内容,所以我也听说过服务器推送功能,但我的头脑,这还不清楚。

此服务器推送功能是否意味着服务器能够在没有后者发出请求的情况下向客户端发送响应?就像一个vanilla TCP连接?或者我错过了这一点?

2 个答案:

答案 0 :(得分:38)

HTTP2推送机制不是像websocket或服务器发送事件那样的通用服务器推送机制。

它专为HTTP对话的特定优化而设计。特别是当客户端请求资源(例如index.html)时,服务器可以猜测它接下来要求一堆相关资源(例如theme.css,jquery.js,logo.png等等)通常,网页可以有10个这样的相关请求。

使用HTTP / 1.1,服务器必须等到客户端实际发送对这些相关资源的请求,然后客户端受连接限制,一次只要求大约6个。因此,在实际发送网页所需的所有相关资源之前,可能需要多次往返。

使用HTTP / 2,服务器可以将响应发送到index.html GET推送promises告诉客户端它还将发送theme.css,jquery.js,logo.png等,就好像客户要求他们。然后,客户端可以取消这些推送,或者只是等待它们被发送,而不会产生多次往返的额外延迟。

以下是使用Jetty https://www.youtube.com/watch?v=4Ai_rrhM8gA推送SPDY(HTTP2的基础)的演示。这是一篇关于jetty中HTTP2和SPDY的推送API的博客:https://webtide.com/http2-push-with-experimental-servlet-api/

答案 1 :(得分:1)

基本上你的理解是正确的,但是,还有更多的东西。

服务器只能在发出HTTP页面请求后才能向客户端发送资源,并且该页面需要的资源才能正确呈现(即图像,JavaScript文件,CSS等)鉴定。负责此的机制是服务器端框架。在Java中,这将是Servlet 4,可能是JSF。

服务器不能只是在感觉到它时将任何资源发送到客户端。只有在上述情况下才会发生,客户端总是能够拒绝服务器请求以推送资源。

HTTP / 2服务器推送的机制设计得非常好,为了掌握它,我推荐这个overview of HTTP/2,这篇深入的文章深入探讨了HTTP/2 protocol的内部。