在小说网站做责编,东莞大岭山镇网站建设,wordpress 迁移到hexo,百度搜索引擎营销如何实现学习日期#xff1a;2024.6.29
内容摘要#xff1a;基于HTTP的功能追加协议和HTTP/2.0 HTTP的瓶颈与各功能追加协议
需求的产生
在Facebook、推特、微博等平台#xff0c;每分每秒都会有人更新内容#xff0c;我们作为用户当然希望时刻都能收到最新的消息#xff0c;为…学习日期2024.6.29
内容摘要基于HTTP的功能追加协议和HTTP/2.0 HTTP的瓶颈与各功能追加协议
需求的产生
在Facebook、推特、微博等平台每分每秒都会有人更新内容我们作为用户当然希望时刻都能收到最新的消息为了尽可能实时的显示最新的内容服务器上一有消息更新就需要同步到客户端上。这看起来不是狠复杂但HTTP并不能很好的完成这一任务。
因为HTTP有以下标准导致其难以满足我们的需求
①一条连接上只能发送一个请求。
②请求只能从客户端开始客户端不能接受除响应以外的任何指令。
③请求/响应首部未经压缩就会发送首部信息发送越多延迟越大。
Ajax的解决方法
AjaxAsynchronous Javascript and XML异步Javascript和XML技术[eɪˈsɪŋkrənəs] adj.异步的不同时的
Ajax的核心技术是名为XMLHttpRequest的API可以达到局部页面替换加载的作用借由这种手段可以从已经加载完毕的Web页面上发起请求然后只更新局部页面从而减少响应中传输的数据加快速度。
但使用Ajax实时从服务器获取内容依然没有解决请求只能从客户端发送的问题在服务器没有更新时可能会导致大量徒劳的请求产生。
Comet的解决方法
一旦服务器端有内容更新Comet方法能立刻向客户端返回响应。这是一种通过延迟应答来模拟服务器端向客户端推送的功能。
Comet方法在收到请求时不会在处理完成后立刻返回响应而是先挂起当服务器端有内容更新时再返回响应以此达到一种伪主动发送更新的功能。
此方法内容是虽然可以实现实时更新但是为了保留响应一次连接的持续时间也变长了为了维持连接会消耗更多的资源。另外Comet也未能解决HTTP协议本身存在的问题。
SPDY
SPDY没有完全改写HTTP协议而是在TCP/IP的应用层与传输层之间通过新增SPDY会话层的方式解决问题同时考虑到安全性问题SPDY规定通信中采用SSL以下为示意图
HTTP应用层SPDY会话层SSL表示层TCP传输层 在使用SPDY后HTTP获得以下功能
1. 多路复用 请求优化
通过单一的TCP连接可以无限制处理多个HTTP请求所有请求的处理都在一条TCP连接上完成处理的效率得到了提高。同时SPDY可以给各个请求分配优先级顺序主要是针对在发送多个请求时针对带宽低导致的响应速度变慢的问题。 2. 支持服务器推送技术
服务器可以主动向客户端发起通信向客户端推送数据这样服务器在更新时可以主动发送数据不必等待客户端的请求。
3. SPDY 压缩了 HTTP 头
舍弃掉了不必要的头信息经过压缩之后可以节省多余数据传输所带来的等待时间和带宽。
4. 强制使用 SSL 传输协议
Google 认为 Web 未来的发展方向必定是安全的网络连接全部请求 SSL 加密后信息传输更加安全。
5. 服务器提示功能
服务器可以主动提示客户端所需的资源由于在客户端发现资源之前就可以得知资源的存在因此在资源已经缓存的情况下无需发送不必要的请求。
HTTP/2.0
HTTP/2.0牛逼在哪
HTTP/2.0是HTTP1.1基础上的改进利用了SPDY和HTTP Speed Friendly等协议解决并发传输、服务器推送、头部压缩这几个HTTP1.1中的难题
头部压缩
HTTP的报文是由头部和主体部分组成的HTTP/1.1只能压缩报文主体部分不能压缩头部。但头部特别是带有Cookie的头部大小并不算小也需要压缩。
HTTP/2 没使用常见的 gzip 压缩方式来压缩头部而是开发了 HPACK 算法HPACK 算法主要包含三个组成部分
静态字典动态字典Huffman 编码压缩算法
客户端和服务器两端都会建立和维护「字典」用长度较小的索引号表示重复的字符串再用 Huffman 编码压缩数据可达到 50%~90% 的高压缩率。
并发传输
HTTP2引入了Stream 通过这个设计多个 Stream 复用一条 TCP 连接达到并发的效果解决了 HTTP/1.1 队头阻塞的问题提高了 HTTP 传输的吞吐量。
为了理解 HTTP/2 的并发是怎样实现的我们先来理解 HTTP/2 中的 Stream、Message、Frame 这 3 个概念。 你可以从上图中看到
①1 个 TCP 连接包含一个或者多个 StreamStream 是 HTTP/2 并发的关键技术
②Stream 里可以包含 1 个或多个 MessageMessage 对应 HTTP/1 中的请求或响应由 HTTP 头部和包体构成
③Message 里包含一条或者多个 FrameFrame 是 HTTP/2 最小单位以二进制压缩格式存放 HTTP/1 中的内容头部和主体
因此我们可以得出结论多个 Stream 跑在一条 TCP 连接同一个 HTTP 请求与响应是跑在同一个 Stream 中HTTP 消息可以由多个 Frame 构成 一个 Frame 可以由多个 TCP 报文构成。
在 HTTP/2 连接上不同 Stream 的帧是可以乱序发送的因此可以并发不同的 Stream 因为每个帧的头部会携带 Stream ID 信息所以接收端可以通过 Stream ID 有序组装成 HTTP 消息而同一 Stream 内部的帧必须是严格有序的。
举个例子就是说TCP连接就像是一个轨道不同的Stream就是开过去不同颜色的火车可以是先开红色的火车过去再开绿色的火车过去并发发送但是到站的顺序每种颜色的车辆一定是按顺序到站的。即红1绿1蓝1绿2蓝2红2...
服务器推送
客户端和服务器双方都可以建立 Stream因为服务端可以主动推送资源给客户端 客户端建立的 Stream 必须是奇数号而服务器建立的 Stream 必须是偶数号。
比如下图Stream 1 是客户端向服务端请求的资源属于客户端建立的 Stream所以该 Stream 的 ID 是奇数数字 1Stream 2 和 4 都是服务端主动向客户端推送的资源属于服务端建立的 Stream所以这两个 Stream 的 ID 是偶数数字 2 和 4。 内容总结自人民邮电出版社《图解HTTP》