我已经阅读了很多关于HTTP 2(仍在开发中)的内容,所以我也听说过服务器推送功能,但我的头脑,这并不清楚。
此服务器推送功能是否意味着服务器将能够向客户端发送响应而无需客户端发出请求?就像普通的 TCP 连接一样?还是我错过了重点?
我已经阅读了很多关于HTTP 2(仍在开发中)的内容,所以我也听说过服务器推送功能,但我的头脑,这并不清楚。
此服务器推送功能是否意味着服务器将能够向客户端发送响应而无需客户端发出请求?就像普通的 TCP 连接一样?还是我错过了重点?
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/