美文网首页
http发展史

http发展史

作者: mafa1993 | 来源:发表于2020-05-02 22:36 被阅读0次

    ##发展

    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加密,多路复用

            + 对称加密,加解密所用的秘钥一致

            + 非对称加密,公钥加密,私钥解密,私钥加密,公钥解密

    相关文章

      网友评论

          本文标题:http发展史

          本文链接:https://www.haomeiwen.com/subject/csalghtx.html