SPDY/HTTP2 是不是连接响应?
Posted
技术标签:
【中文标题】SPDY/HTTP2 是不是连接响应?【英文标题】:Does SPDY/HTTP2 concatenates responses?SPDY/HTTP2 是否连接响应? 【发布时间】:2013-10-13 22:56:32 【问题描述】:我有一个关于 SPDY/HTTP2 的问题: 通常您将多个 CSS 和 JS 文件连接到一个文件中以保存请求并获得更好的性能。我听说 SPDY/HTTP2 将多个请求组合成一个响应。这是否意味着我不再需要预先连接 CSS 和 JS 文件,因为这是由协议处理的?
换句话说:
我可以将<script source="moduleA.js"></script>
和<script source="moduleB.js"></script>
与SPDY/HTTP2 一起使用,就像我将<script source="allScripts.js"></script>
与HTTP1 一起使用吗?从响应性能的角度来看,这是否相同,但具有单独缓存每个文件的好处,以便我可以更改 moduleB.js
并保持 moduleA.js
缓存?
【问题讨论】:
【参考方案1】:HTTP/2.0 尚不存在 (AFAIK) - 它仍然是一个提议的标准。但它似乎很可能会使用与 SPDY 类似的连接处理。
SPDY 不会将它们连接起来,而是在同一连接上多路复用请求 - 从网络的角度来看,效果是相同的。
是的,您不需要手动合并内容文件,是的,它们将被独立缓存。
【讨论】:
除了 hello world 之外,是否有任何可用的真实世界分析?【参考方案2】:SPDY3 和 HTTP2 在同一物理连接上多路复用请求。 但即使是多路复用的,请求也可能会为每个资源按顺序发送,从而由于往返时间等待而导致严重的减速。
SPDY3 和 HTTP2 都有一个称为“资源推送”(也称为“SPDY 推送”,不要与“服务器推送”混淆)的功能,它允许在客户端不请求的情况下推送相关资源,@ 987654321@ - 我是一名提交者 - 据我所知,implements that feature 是唯一一个。
您可以在此视频中观看资源推送的实际操作:http://webtide.intalio.com/2012/10/spdy-push-demo-from-javaone-2012/。
使用资源推送,您可以节省额外的往返行程来获取所有不同的 JS 文件,并且仍然可以从每个文件的浏览器缓存中受益。 资源连接的全部意义在于减少获取所有所需资源所需的往返次数,而资源推送有助于解决这个问题。
【讨论】:
【参考方案3】:HTTP/2.0 允许多路复用,其中多个请求/响应流通过同一 TCP 连接交换数据。
因为创建和启动 TCP 连接的成本很高,所以 HTTP/2.0 的多路复用通常会比 HTTP/1.1 的半并行下载快,后者的 TCP 连接数量有限(重新)被浏览器用来执行给定数量的资源请求。
但您的里程可能会有所不同。测量一下。
作为旁注,您可能希望在开发和调试时分别引用所有库,但在部署时将 JS/CSS 捆绑并缩小到一个文件中。
【讨论】:
对不起 - 但这在几个地方非常令人困惑和错误。creating and starting TCP connections is expensive
- 是的,但是 keepalive 和流水线已经存在了很长时间 - 浏览器至少在过去 12 年里一直在重用连接。 SPDY 不会改变这种行为——它消除了在单个通道上按顺序传递请求的需要。 SPDY 可以很容易地使用多个通道——同样需要注意的是会破坏 TCP 慢启动。
@symcbean 我不打算写 HTTP/1.1 和 2.0 之间的完整比较。 OP 询问:通过 HTTP/1.1 捆绑文件和不通过 HTTP/2.0 捆绑文件之间会有什么区别,我对此作出了解释,解释了多路复用可以给解释的情况带来的差异。请指出我错在哪里。以上是关于SPDY/HTTP2 是不是连接响应?的主要内容,如果未能解决你的问题,请参考以下文章
Quickbooks Web 连接器“响应不是格式良好的 XML”错误