24

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

此服务器推送功能是否意味着服务器将能够向客户端发送响应而无需客户端发出请求?就像普通的 TCP 连接一样?还是我错过了重点?

4

2 回答 2

41

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

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

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

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

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

于 2015-01-22T16:58:26.197 回答
1

本质上你的理解是正确的,但是,它还有很多。

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

服务器不能在需要时向客户端发送任何资源。只有在上述情况下才会发生,并且客户端总是能够拒绝服务器请求推送资源。

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

于 2017-07-23T12:00:56.980 回答