##发展
1. 单进程(多线程模式),不安全(多个tab页面间是多个线程,线程间相互访问方便),不流畅(线程阻塞),不稳定(线程崩,进程崩),
2. 多进程
- 浏览器进程,用户交互,子进程管理,文件存储
- 渲染进程
- 网络进程,网络请求
- GPU进程,GPU加速等
- 插件进程
3. 未来架构 面向服务的
## http发展
1. http/0.9
- 只有请求行,返回信息也没有响应头,只返回数据
- 内容以ASCII字符流来传输
2. http/1.0
- 增加了请求头和响应头,支持文件类型,压缩,编码类型,语言版本
- 引入状态码
- cache机制
- 增加了UA 用户代理字段
3. http/1.1
- 增加了tcp持久链接,一个tcp可以传输多个http请求
- http管线化(多个http请求整批发出,传输过程中不需要等待服务器回应)不成熟,tcp队头阻塞(http请求可以并发的发送了,但是返回要顺序返回,第一个达到的请求要第一个响应,如果第一个请求在服务端阻塞了,那么后续请求会被阻塞)
- 增加虚拟主机,增加host字段来表示主机
- 动态生成内容提供了完美支持。chunk transfer(bigpipe),响应头里transfer-encoding:chunked
+ bigpipe就是利用了chunk属性,将html界面分块传回,减少传输的大小,提高FP
- cookie安全机制
- 每个域名最多同时维护6个tcp长连接
- 1.0时,利用keep-alive来实现长连接,1.1中所有都为长连接,除非在头中增加connection:close
- 非持久化链接时。使用链接是否关闭来判断请求和响应是否结束,持久链接时,可以使用content-length来控制,但是会使得占用内存增加,需要计算所有数据的长度,
+ Content-Length 比实际长度短,会造成内容被截断;如果比实体内容长,会造成 pending
+ web优化指标TTFB(time to first byte)发出请求到收到响应的第一个字节花费的时间
+transfer-encoding:chunked 分块编码,每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的 CRLF(\r\n),最后一块的长度为0,没有数据,用来标示传输结束
- tcp慢启动,因为三次握手,如果是https或增加一个tty
4. http/2.0
- 多路复用机制
- 增加了分帧层,进行传输时,会先对数据切分
- 实现头部压缩
- [服务器推送](https://www.cnblogs.com/qcloud1001/p/9370493.html)
+ server push,浏览器对资源的解析是串行,解析到的时候才会去请求,获取css js资源,导致资源等待,服务器在发送html时,同时发送
+ 实现方式 http请求头,link:<push.css>; rel=preload; as=style
+ 实现方式,静态link
- 可以设置请求的优先级
+ 每个资源都获取一个stream ID来标识连接上的资源,并且有三个参数用于定义资源优先级:
+ 1.父级数据流(Parent Stream):这个数据流是一个“依赖”资源或者应该在之后被传递的数据流。有一个所有数据流共享的虚拟root stream 0。
+ 2.权重(Weight):1到256之间的数字,用于标识在多个数据流共享连接时分配给此数据流的带宽量。带宽是相对于所有其他活动的数据流的权重分配的,而不是绝对值。
+ 3.独占位(Exclusive bit):一个标志,表示应该在不与任何其他数据流共享带宽的情况下下载。
- 队头阻塞
- 底层使用了一个tcp通道,传输所有请求,如果丢包,会导致所有的请求都重发
5. http/3.0
- 解决2.0的tcp队头阻塞问题
- 基于udp的QUIC协议
- 是想了tcp的流量控制,传输可靠性,TLS加密,多路复用
+ 对称加密,加解密所用的秘钥一致
+ 非对称加密,公钥加密,私钥解密,私钥加密,公钥解密
网友评论