HTTP/1.x

作者: angeChen | 来源:发表于2017-09-26 10:06 被阅读12次

HTTP/1.x 协议是一个文本协议,可读性非常好,但是并不高效

解析

  • 解析一个完整的 HTTP 请求,首先要正确读出 HTTP header。HTTP header 各个 fields 使用 \r\n 分隔,然后跟 body 之间使用 \r\n\r\n 分隔。解析完 header 之后,才能从 header 里面的 content-length 拿到 body 的 size , 从而读取 body
  • 这套流程其实并不高效,因为我们要读取多次,才能将一个完整的 HTTP 请求给解析出来,虽然在代码上有很多的优化方法:
    • 一次将一大块数据读取到 buffer 里面,避免多次 IO 开销
    • 读取的时候直接匹配 \r\n 的方式流式解析
  • 主要问题在于, HTTP/1.x 协议是一个文本协议,是给人看的,对机器并不友好,二进制才是更好的选择

Request/Response

  • HTTP/1.x 另一个问题就在于它的交互模式,一个连接每次只能一问一答,也就是client 发送了 request 之后,必须等到 response,才能继续发送下一次请求。
  • 这套机制是非常简单,但会造成网络连接利用率不高。如果需要同时进行大量的交互,client 需要跟 server 建立多条连接,但连接的建立也是有开销的,所以为了性能,通常这些连接都是长连接一直保活的,虽然对于 server 来说同时处理百万连接也没啥太大的挑战,但终归效率不高。

Push

  • HTTP/1.x 并没有推送机制。所以通常两种做法:
    • Long polling 方式,也就是直接给 server 挂一个连接,等待一段时间(譬如 1 分钟),如果 server 有返回或者超时,则再次重新 poll。
    • Web-socket,通过 upgrade 机制显式的将这条 HTTP 连接变成裸的 TCP,进行双向交互

相关文章

  • HTTP/2 Frames

    HTTP/1.x messages 缺点 HTTP/1.x messages have a few drawbac...

  • HTTP/1.x

    HTTP/1.x 协议是一个文本协议,可读性非常好,但是并不高效 解析 解析一个完整的 HTTP 请求,首先要正确...

  • 升级nginx以支持http2

    HTTP/2 的优势 相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化: HTTP/2 采用二...

  • 二.【Vue踩坑】vue的准备工作

    webpack 1.X文档地址http://webpack.github.io/docs/ 2.X文档地址http...

  • Golang net/http: HTTP/1.x transp

    简述 今日用golang开发微信小程序 请求wechat服务接口碰到一个问题记录一下 用golang 标准库请求发...

  • OkIO简单学习

    参考:http://square.github.io/okio/1.x/okio/ 1、引用 compile 'c...

  • HPACK和twitter hpack源码解析

    HPACK是用于压缩HTTP/2中header信息的压缩算法。 引言 在HTTP/1.x中,header信息以字符...

  • HTTP connection

    在 HTTP/1.x 中,有几种连接模式: short-lived connections(短连接) persis...

  • HTTP/2与雪碧图性能对比

    HTTP/1.x的缺陷 连接无法复用,需要开启多个连接 没有进行头部压缩,协议开销大 线头阻塞 HTTP/2 协议...

  • HTTP2 协议前瞻

    HTTP/2 优势 HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解...

网友评论

      本文标题:HTTP/1.x

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