http / 2服务器推送的大多数用例是抢先将资产文件(例如javascript和css文件)推送到浏览器。我想知道可以使用http / 2服务器推送将动态有效负载(如JSON文档)发送到客户端应用程序吗?从http2-spec开始,它没有提及任何相关内容。任何人都可以详细说明这个吗?为什么或为什么不呢?
答案 0 :(得分:9)
HTTP / 2不是为了替代websockets,因为你提出请求(例如网页)并且可能会获得多个资源(例如,网页,显示网页所需的CSS,运行所需的JavaScript)那个网页...等。)。
HTTP / 2因此不是真正双向的,因为它仍然响应初始请求。
因此,如果您打算发送JSON请求以响应初始请求那么这很好 - 它只是另一种资源,与CSS和javascript非常相似。
但是,如果您打算保持通道打开以继续发送更多JSON有效负载以使您的页面保持最新,那么这不是HTTP / 2的目的。这就是websockets的用途。
此问题有关于HTTP / 2与websockets的更多详细信息:Does HTTP/2 make websockets obsolete?
答案 1 :(得分:0)
是的,您可以使用HTTP / 2 Push发送任何类型的资产。但请记住以下内容:
正如 BazzaDP 所说,HTTP/2 Push is not a push notification mechanism。但HTTP / 2非常适合进行长轮询,然后你有内容编码压缩,加密,HTTP标头和流量控制,因此对于90%的情况你可以并且可能应该跳过websockets。请注意,在进行长轮询时,不需要HTTP / 2推送。还要注意,有一些名为Server Sent Events的东西是浏览器认可的长轮询版本。
HTTP / 2 Push对应用程序来说是透明的。这意味着您必须执行Push 和从您的应用程序请求资源。
目前,只有可缓存的内容可供应用程序使用。这意味着您需要在动态生成的JSON响应中设置缓存标头。可能您可以设置一个较短的过期时间,或一个较长的过期时间,但在动态URL下。