作者PsMonkey (痞子军团团长)
看板Translate-CS
标题[翻译] HTTP/2
时间Sun Nov 15 15:26:47 2015
原文网址:
http://www.integralist.co.uk/posts/http2.html
blog 版:
http://blog.dontcareabout.us/2015/11/http2.html
----------------------------------------------------------------------
引言
====
这是一篇很简短的文章,展示如何利用新的 HTTP/2 通讯协定。
如果你不熟悉它,那麽让我花一点点时间来讨论其中的一些亮点:
* 单一、持续的连线
* Multiplexing
* 压缩 header
* 优先等级
* 加密
* Server Push
如果这些功能对你而言都不知所云,让我作进一步的解释......
持续连线
========
在 HTTP/1.x,web 页面上每个 resource 都需要各自的连线。
如果一个页面上有三张图片、就会分别产生三个连线。
在 HTTP/2 会用单一的连线搭配 stream 的概念来改善这个状况。
stream 是一个有效率的双向通道,资讯可以透过 stream 往上或往下传递;
一个连线在有需要的情况下也可以管理多个 stream。
以前为了效率而发展出的这些技术就不再需要了:
* domain sharding:解决 browser 对同一个 domain 的并行连线数量限制。
* 影像 sprite:将多个影像合并成一个,以减少 server 连线数量。
* 串接 CSS / JS:将数个 CSS / JavaScript 档案组成单一档案,
以减少 server 连线数量。
这也代表 browser 可以更精准处理 resource 的 cache,
因为已经没有必要把 static resource 绑在一起。
这也避免使用者下载他们不会用到的东西。
Multiplexing
============
简单地说,就是单一连线可以同时承载多个 resource。
这是个很棒的效能改善、在大量传输 resource 时也能比 HTTP/1.x 管理的更好。
压缩
====
header 资讯不会用纯文字的方式传送了。
现在会压缩让它更小、接收 response 的速度也更快
(虽然这点公认只是个边际效益)。
这也代表我们应该不用在那麽担心
「把 static resource 挪到 cookie-less domain 上」这件事情。
这曾经是个问题,因为要包含 cookie 的资料,
所以 static resource 会统统变大许多。
优先等级
========
因为用了 multiplexing 的方式让所有连线变成一个连线,
我们需要一个方法让某些 request 有比较高的优先度,
以确保它们可以比其他 resource 更快被存取到。
HTTP/2 可以设定每个 stream 的权重
(stream 的观念参见上面「持续连线」的部份)。
我不打算深入到设计的细节中。
只能说:如果你想知道藏了一堆魔鬼的细节,
我建议你到[这里][http2]读规格文件。
[http2]:
http://http2.github.io/http2-spec/#rfc.section.5.3.2
SSL / TLS
========
上述的亮点暗示了在 SSL / TLS 的 handshake 流程上
也降低了整体的时间耗用。原因如下:
* 单一连线会将 client / server 之间的 handshake 次数降低到最低。
* multiplexing 允许用非同步的方式处理 request。
* 压缩过的 HTTP header 让连线更小(也就更快)。
* 有优先等级的连线会以适当的顺序处理有关的 request。
Server Push
===========
在 HTTP/2 的规格中,client 发出最初的 HTTP request 之後,
server 可以送出额外的资讯。
下面这件事情很重要:server push 与 [server-sent event] 是不一样的技术。
server-send event 让 server 可以推送更新给 client;
而只要 client 有监听相关的 event,该 client 就能接收到推送的通知。
server push 是不一样的东西、解决不一样的使用情况。
使用 HTTP/2 的 server 可以对 client 发送额外的 resource,
即使 client 根本没有要求这些东西。
举一个经典的例子:当 client request 一个
有一些 CSS、JavaScript 等 static resource 的 HTTP 页面。
在 HTTP/1.x,client 会 request 页面、
parse 之後发现这个页面有包含 CSS、JavaScript。
接着 client 必须要另外发出那些 static resource 的 request。
在 HTTP/2 中,server 可以在处理 client 一开始的 request 时
就送出全部的 static resource 以省去 client 发出多个 request。
[server-sent event]:
https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
----------------------------------------------------------------------
後面还有一段「Implementations」,略过不译
翻完之後才觉得这篇文章实在是... [远目]
尤其是 Server Push 的段落实在有点语焉不详...
--
钱锺书:
说出来的话
http://www.psmonkey.org
比不上不说出来的话
Java 版 cookcomic 版
只影射着说不出来的话
and more......
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.37.99.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Translate-CS/M.1447572412.A.FE3.html
1F:推 tiefblau: 奇怪我怎麽记得一就有persistent connection了... 11/23 00:46
就《高效能网站开发指南》所述,HTTP/1.1 才有这个功能
HTTP/1.0 并没有
不过 HTTP/1.1 只是可以持续连线,必须一个传完才能换下一个
所以如果一次要六张图的话
可能还是会选择另外在加开五个连线吧?
当然,我绝对认同这篇文章实在写的没有很好 Orz
※ 编辑: PsMonkey (211.20.120.56), 11/23/2015 08:55:26