http1.x
- 缺陷: 线程阻塞,同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞;
HTTP1.0(短连接)
- 缺陷: 浏览器与服务器只保持短暂的链接;浏览器每次请求都需要与服务器建立一次TCP链接(TCP链接的成本很高,因为需要客户端和服务器三次握手),服务器完成请求处理后立即断开TCP链接,服务器不跟踪每个客户也不记录过去的请求;
- 解决方案: 添加头信息——非标准的Connection字段Connection: keep-alive
HTTP1.1 流水线和队头阻塞
-
客户端首次接受的相应常常不能完全渲染。相反,它包含一些其他需要的资源。因此,客户端必须发出一些请求。HTTP1.0客户端的每一个请求必须重新连接,这是非常耗时和资源的;
-
HTTP1.1通过引入长连接和流水线技术处理了这个问题,通过长连接,HTTP1.1假定这个TCP连接应该一直打开知道被通知关闭。这就允许客户端通过同一个连接发送多个请求。这种情况有一个瓶颈。当一个对头的请求不能收到相应的资源,他会阻塞后面的请求,这就是知名的对头阻塞问题。
避免方式: 一是减少请求,二是同时多开持久连接
注意: 虽然添加并行TCP连接能够减轻这个问题,但是TCP连接的数量是有限的,且每个新的连接需要额外的资源。
HTTP2.0
-
采用二进制而非文本格式
-
完全多路复用,而非有序并阻塞、只需要一个连接即可实现并行;(解决了队头阻塞的问题,与HTTP1.x最重要的区别)
-
使用报头压缩,降低开销
-
服务器推送
二进制传输
-
在HTTP2,二进制框架层编码请求和响应,并把他们分成更小的包,能显著的提高传输的灵活性。
-
与HTTP1.1利用多个TCP连接来减少队头阻塞的影响相反,HTTP2在两端建立一个单独的连接。该连接包含多个数据流。 每个流包含多个请求/响应格式的消息 。 最终,每个消息被划分为更小的帧单元。
多路复用
-
HTTP1.x会产生队头阻塞问题,且多开TCP链接需要额外的资源。
-
HTTP2通过一个连接来多路复用。 结果是在传输层的TCP连接不足以管理每个流的发送。HTTP2允许客户端和服务器端实现他们自己的流控制机制,而不是依赖传输层。两端在传输层交换可用的缓冲区大小,来让他们在多路复用流上设置自己的接收窗口。
压缩技术
-
HTTP1.x消息头部分依然是纯文本发送。尽管每个头都很小,但随着请求越来越多,连接的负担就会越重,如果带了cookie. Header将变得更大。
-
HTTP2 的二进制框架层在细节上表现出强大的控制力,在头压缩上也是如此。 HTTP2 能把头从他们的数据中分离,并封城头帧和数据帧。 http2特定的压缩程序HPACK可以压缩头帧。 该算法用Huffman编码头metadata,可以很大程度上减少头大小。此外, HPACK可以跟踪先前传输的metadata字段,然后通过动态改变服务器端和客户端共享的索引来进一步压缩。
服务器推送
-
HTTP1.x需要向服务器发送请求并获取资源。
-
HTTP2支持多个并发响应,服务器可以提前吧HTML页面中的其他资源在客户端请求之前发给他。
-
服务器先发送一个PUSH_PROMISE帧通知客户端将推送资源。改帧只包含头信息,且允许用户提前知道哪些资源将被推送。如果客户端已经缓存,可以拒绝推送。
HTTP与HTTPS的一些区别
-
传输信息bai安全性不同
-
http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。
-
https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。
-
-
连接方式不同
-
http协议:http的连接很简单,是无状态的。
-
https协议:是由SSL + HTTP 协议构建的可进行加密传输、身份的网络认证。
-
-
端口不同
-
http协议:使用的端口是80。
-
https协议:使用的端口是443.
-
-
证书申请方式不同
-
http协议: 免费申请。
-
https协议: 需要ca申请证书,一般免费的证书很少,需要交费。
-