透视 HTTP 协议
罗剑锋(Chrono)
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者
63943 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
开篇词 (1讲)
透视 HTTP 协议
15
15
1.0x
00:00/00:00
登录|注册

14 | HTTP有哪些优点?又有哪些缺点?

缺点
优点
HTTP的优点和缺点

该思维导图由 AI 生成,仅供参考

上一讲我介绍了 HTTP 的五个基本特点,这一讲要说的则是它的优点和缺点。其实这些也应该算是 HTTP 的特点,但这一讲会更侧重于评价它们的优劣和好坏。
上一讲我也留了两道课下作业,不知道你有没有认真思考过,今天可以一起来看看你的答案与我的观点想法是否相符,共同探讨。
不过在正式开讲之前我还要提醒你一下,今天的讨论范围仅限于 HTTP/1.1,所说的优点和缺点也仅针对 HTTP/1.1。实际上,专栏后续要讲的 HTTPS 和 HTTP/2 都是对 HTTP/1.1 优点的发挥和缺点的完善。

简单、灵活、易于扩展

首先,HTTP 最重要也是最突出的优点是“简单、灵活、易于扩展”。
初次接触 HTTP 的人都会认为,HTTP 协议是很“简单”的,基本的报文格式就是“header+body”,头部信息也是简单的文本格式,用的也都是常见的英文单词,即使不去看 RFC 文档,只靠猜也能猜出个“八九不离十”。
可不要小看了“简单”这个优点,它不仅降低了学习和使用的门槛,能够让更多的人研究和开发 HTTP 应用,而且我在第 1 讲时就说过,“简单”蕴含了进化和扩展的可能性,所谓“少即是多”,“把简单的系统变复杂”,要比“把复杂的系统变简单”容易得多
所以,在“简单”这个最基本的设计理念之下,HTTP 协议又多出了“灵活和易于扩展”的优点。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

HTTP协议的优点在于其简单、灵活、易于扩展,具有成熟的软硬件环境和广泛的应用。然而,其“无状态”特性既简化了服务器实现和负载均衡,又限制了对连续多步骤事务操作的支持。另外,明文传输存在隐私泄露的风险,且HTTP协议在身份认证和完整性校验方面欠缺。性能方面,HTTP基于TCP/IP,使用了“请求-应答”的通信模式,但在移动和高并发环境下表现不够理想,且存在队头阻塞问题。尽管HTTP存在缺点,但其灵活可扩展的特点为解决这些问题提供了可能性。未来的“进阶篇”和“安全篇”将进一步探讨这些问题。 HTTP协议的优点在于其简单、灵活、易于扩展,具有成熟的软硬件环境和广泛的应用。然而,其“无状态”特性既简化了服务器实现和负载均衡,又限制了对连续多步骤事务操作的支持。另外,明文传输存在隐私泄露的风险,且HTTP协议在身份认证和完整性校验方面欠缺。性能方面,HTTP基于TCP/IP,使用了“请求-应答”的通信模式,但在移动和高并发环境下表现不够理想,且存在队头阻塞问题。尽管HTTP存在缺点,但其灵活可扩展的特点为解决这些问题提供了可能性。未来的“进阶篇”和“安全篇”将进一步探讨这些问题。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《透视 HTTP 协议》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • Xiao
    老师说的对,以前的时候觉得看书或者文章,人家说什么就是什么,而且很绝对。后来慢慢发现,很多东西都是需要结合业务场景来分析的,在这种业务场景是优点,在另外的业务场景就可能是致命的缺点!那句话:脱离业务场景谈技术就是耍流氓!哈哈哈,谢谢老师!

    作者回复: 自己思考就有收获,尽信书则不如无书。

    2019-06-28
    46
  • 1:你最喜欢的 HTTP 优点是哪个?最不喜欢的缺点又是哪个?为什么? 最喜欢她的简单,因为简单所以美好,简简单单容易上手,易于理解。 最不喜欢她的不安全和低性能,如果她能做到安全高效,那就不用再去学习别的乱七八糟的协议了,编写RPC接口也就没有其他框架什么事情了,搞微服务应该门槛更低效率更高,当然,她目前做不到,由于考上层以后估计也悬,不过如果基建OK,也许网络带宽不再是瓶颈,她能做到天然的高效传输吧! 2:你能够再进一步扩展或补充论述今天提到这些优点或缺点吗? 简单和易扩展,我认为是矛盾的,很少系统能做到即易扩展又简单,毕竟以后需要什么谁也不能未卜先知,留下扩展的余地毕竟会增加复杂度吧!如果设计的不好,复杂度也许会急剧上升,不过HTTP做的很好貌似没有出现这种情况。不知是为什么?是公共的预定义基本OK吗?其实扩展的不是很多吗?还请老师分享一下。 3:你能试着针对这些缺点提出一些自己的解决方案吗? 有无状态已有方案,可以自由选择 安全性后面也会采用加密的方式来解决 低效这个是相对的,靠上必然会低效,如果基建进一步加强,也许能进一步解决,不过这个看需求和增加的带宽那个更大吧! 明文最早的初心就是分享信息,明文我觉得太正常了,现在多了安全性的需求,所以,才渴望更安全的,此时的HTTP用于分享信息已是一部分功能,她还可以实现各种各样的诉求。 如果协议里设置的有类似开关的东西就好了,可以选择是否有状态、可以选择是否明文、可以选择是否加密,使用者仅需要控制开关就能实现相关的功能,不需自己实现,那就更好了。

    作者回复: 还是这么认真写作业啊,笑。 1.http/2和http/3可以解决你说的问题。 2.我觉得http一开始的文本格式头结构算是误打误撞,正好即简单又容易扩展,有点像xml。 3.请看后面的http/2。

    2020-03-29
    2
    14
  • レイン小雨
    老师,我想问一下关于“队头阻塞”的概念,正好上周团队有人分享这方面的知识,当时是说浏览器针对一个域名最多同时建立6个连接通道,也就是支持6个http并发,当一个页面中有100个资源文件需要加载的时候,就只能6个6个的串行加载,第七个请求要等到第一个请求结果返回来之后才能发出。这么理解队头阻塞的概念对吗?

    作者回复: 你说的这6个连接是为了解决队头阻塞而实现的并发连接。 而“第七个”实际上是排队等待,还不是队头阻塞。 马上就会讲到这个问题了,再等几天。

    2019-06-29
    5
    13
  • Geek_d59aa7
    老师,问个沙雕问题,什么叫明文传输,难道http里的信息不是转成二进制传输的吗,看网上的意思好像明文传输是直接传输字母和数字??不是二进制?

    作者回复: 明文是相对于密文而言的,意思是可以直接看到内容,而密文是经过加密的,看到的是乱码。 可以参考后面的安全篇。

    2020-07-02
    2
    9
  • 业余草
    老师不仅技术好,文章写的也很好。比较喜欢看这种风格的文章,可以加个微信好友吗?我微信:xttblog

    作者回复: 抱歉,个人微信用的比较少,可以在GitHub上交流。

    2019-06-28
    3
    8
  • 欢乐的小马驹
    老师好,小贴士里面提到了:绝大多数的网站都封禁了80/8080以外的端口号,只允许HTTP进行穿透。 1、最初为什么要封禁其他端口只留80/8080呢? 2、穿透是什么意思?

    作者回复: 1.因为80/8080只用于http协议传输网页,禁掉其他端口就降低了被嗅探、攻击的可能性,提高安全性。 2.穿透是个通俗的说法,就是通过80端口可以一路畅通,一直传到后端去处理,而不会在服务器被挡住。

    2020-03-11
    6
  • 我的朋友叫垃圾呆
    老师,我查了资料之后还是不太理解 文本协议和二进制协议,我看之前的文章有说,从http2 开始,变成了二进制协议,这篇文章说 tcp是二进制协议,而http是文本协议,不太能理解两者的区别,在传输信息的时候不都是转换成二进制的字节流进行传输的吗

    作者回复: 这种说法主要是以协议是否human readable为判断标准的,就是说传输的数据是否让人直接不借助工具就能够阅读。 对比一下,http协议的状态行、头字段都用的是ASCII码,可以直接看,而tcp的头用的是二进制位,不能直接看。

    2021-01-03
    2
    5
  • 小丽
    老师讲的非常透彻,有些话看似简单,却值得琢磨,希望老师多讲一点关于身份认证和安全的东西

    作者回复: 下周就会进入安全篇了,详细讲解https、ssl/tls。

    2019-07-13
    3
  • -W.LI-
    老师好!传输的时候序列化方式属于HTTP范畴么?现在大多用的json形式可是cloud和dubbo在高并发情况下dubbo性能比cloud好。网上说是序列化方式不一样。也不晓得是不是

    作者回复: http不管body的格式,所以可以自己选择序列化方式。 json的优点是易读易解析,但明文显然格式容易,开销大,所以要求高性能都用专门的二进制序列化。 我用c/c++比较多,对Java不太了解,不好评价,抱歉了。

    2019-06-28
    3
    3
  • Xiao
    不觉得明文是缺点,因为http本身就是一套标准规范,而且前面也说它是非常灵活的,所以个人觉得明文也是一种场景,用户也可以选择密文传输!

    作者回复: 明文是把“双刃剑”,很多时候是优点,但换个场景就是缺点了。 什么事情都是这样,没有绝对,就看应用的场景。

    2019-06-28
    3
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部