美文网首页
HTTP 协议简史

HTTP 协议简史

作者: Joah_l | 来源:发表于2019-09-29 11:57 被阅读0次
    • 短连接:(short-lived connections

      • 每一个 http 请求都有它独立完成, 这个就意味着每一个 http 请求之前都会有一个 tcp 连接和握手

      • 在 http 1.0 的时候, Connection设置为 close 才会使用这个模型

    • 持久连接(persistent - connections):

      • keep-alive 连接
    • http 2.0

      • 长连接数据帧数据流

    http2 是基于的协议, 采用分帧是为了将重要的信息进行封装, 数据帧是 http 2.0 中最小的数据传输单位,

    • 这个是数据帧的数据结构:
    image

    http2 规范了对数据流的定义,HTTP/2 连接上独立的、双向的帧序列交换。你可以将流看作在连接上的一系列帧,它们构成了单独的 HTTP 请求和响应。
    如果客户端想要发出请求,它会开启一个新的流。然后,服务器将在这个流上回复。这与 http 1 的请求 / 响应流程类似,
    重要的区别在于,因为有分帧,所以多个请求和响应可以交错,而不会互相阻塞。流 ID(帧首部的第 6~9 字节) 用来标识帧所属的流。

    • 多路复用:

    就是说在一个TCP连接上,我们可以向对方不断发送一个个的消息,这里每一个消息看成是一帧,而每一帧有个stream identifier 的字段标明这一帧属于哪个 流,然后在对方接收时,根据 stream identifier 拼接每个 流 的所有帧组成一整块数据。我们把 HTTP/1.x 每个请求都当作一个 流,那么请求化成多个流,请求响应数据切成多个帧,不同流中的帧交错地发送给对方,这就是HTTP/2中的 多路复用

    image
    • 不同的流在交错发送;
    • HEADERS 帧在 DATA 帧前面;
    • 流的ID都是奇数,说明是由客户端发起的,这是标准规定的,那么服务端发起的就是偶数了。

    HTTP/2 还是提供了 SETTINGS_MAX_CONCURRENT_STREAMS 字段在 SETTINGS 帧 上设置,可以限制并发流数目,标准上建议不要低于 100 以保证性能。

    image
    • HTTP/1.x 一次请求-响应,建立一个连接,用完关闭;每一个小组任务都需要建立一个班级,多个小组任务多个班级,1:1比例

    • HTTP/1.1 Pipeling 解决方式为,若干个小组任务排队串行化单线程处理,后面小组任务等待前面小组任务完成才能获得执行机会,一旦有任务处理超时等,后续任务只能被阻塞,毫无办法,也就是人们常说的线头阻塞

    • HTTP/2 多个小组任务可同时并行(严格意义上是并发)在班级内执行。一旦某个小组任务耗时严重,但不会影响到其它小组任务正常执行

    • 针对一个班级资源维护要比多个班级资源维护经济多了,这也是多路复用出现的原因。

    http2_stream_thumb.png

    相关文章

      网友评论

          本文标题:HTTP 协议简史

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