透视HTTP协议
罗剑锋(Chrono)
奇虎360技术专家,Nginx/OpenResty开源项目贡献者
立即订阅
6077 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|To Be a HTTP Hero
免费
破冰篇 (7讲)
01 | 时势与英雄:HTTP的前世今生
02 | HTTP是什么?HTTP又不是什么?
03 | HTTP世界全览(上):与HTTP相关的各种概念
04 | HTTP世界全览(下):与HTTP相关的各种协议
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
06 | 域名里有哪些门道?
07 | 自己动手,搭建HTTP实验环境
基础篇 (7讲)
08 | 键入网址再按下回车,后面究竟发生了什么?
09 | HTTP报文是什么样子的?
10 | 应该如何理解请求方法?
11 | 你能写出正确的网址吗?
12 | 响应状态码该怎么用?
13 | HTTP有哪些特点?
14 | HTTP有哪些优点?又有哪些缺点?
进阶篇 (8讲)
15 | 海纳百川:HTTP的实体数据
16 | 把大象装进冰箱:HTTP传输大文件的方法
17 | 排队也要讲效率:HTTP的连接管理
18 | 四通八达:HTTP的重定向和跳转
19 | 让我知道你是谁:HTTP的Cookie机制
20 | 生鲜速递:HTTP的缓存控制
21 | 良心中间商:HTTP的代理服务
22 | 冷链周转:HTTP的缓存代理
安全篇 (7讲)
23 | HTTPS是什么?SSL/TLS又是什么?
24 | 固若金汤的根本(上):对称加密与非对称加密
25 | 固若金汤的根本(下):数字签名与证书
26 | 信任始于握手:TLS1.2连接过程解析
27 | 更好更快的握手:TLS1.3特性解析
28 | 连接太慢该怎么办:HTTPS的优化
29 | 我应该迁移到HTTPS吗?
飞翔篇 (4讲)
30 | 时代之风(上):HTTP/2特性概览
31 | 时代之风(下):HTTP/2内核剖析
32 | 未来之路:HTTP/3展望
33 | 我应该迁移到HTTP/2吗?
探索篇 (5讲)
34 | Nginx:高性能的Web服务器
35 | OpenResty:更灵活的Web服务器
36 | WAF:保护我们的网络服务
37 | CDN:加速我们的网络服务
38 | WebSocket:沙盒里的TCP
总结篇 (2讲)
39 | HTTP性能优化面面观(上)
40 | HTTP性能优化面面观(下)
答疑篇 (2讲)
41 | Linux/Mac实验环境搭建与URI查询参数
42 | DHE/ECDHE算法的原理
结束语 (1讲)
结束语 | 做兴趣使然的Hero
透视HTTP协议
登录|注册

13 | HTTP有哪些特点?

Chrono 2019-06-26
通过“基础篇”前几讲的学习,你应该已经知道了 HTTP 协议的基本知识,了解它的报文结构,请求头、响应头以及内部的请求方法、URI 和状态码等细节。
你会不会有种疑惑:“HTTP 协议好像也挺简单的啊,凭什么它就能统治互联网这么多年呢?”
所以接下来的这两讲,我会跟你聊聊 HTTP 协议的特点、优点和缺点。既要看到它好的一面,也要正视它不好的一面,只有全方位、多角度了解 HTTP,才能实现“扬长避短”,更好地利用 HTTP。
今天这节课主要说的是 HTTP 协议的特点,但不会讲它们的好坏,这些特点即有可能是优点,也有可能是缺点,你可以边听边思考。

灵活可扩展

首先, HTTP 协议是一个“灵活可扩展”的传输协议
HTTP 协议最初诞生的时候就比较简单,本着开放的精神只规定了报文的基本格式,比如用空格分隔单词,用换行分隔字段,“header+body”等,报文里的各个组成部分都没有做严格的语法语义限制,可以由开发者任意定制。
所以,HTTP 协议就随着互联网的发展一同成长起来了。在这个过程中,HTTP 协议逐渐增加了请求方法、版本号、状态码、头字段等特性。而 body 也不再限于文本形式的 TXT 或 HTML,而是能够传输图片、音频视频等任意数据,这些都是源于它的“灵活可扩展”的特点。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《透视HTTP协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(23)

  • 壹笙☞漂泊
    课后题:
    1、我觉得所谓的优点和缺点都是要区别场景来看待的,比如,在一些长连接场景中,需要保存上下文状态,那么无状态这一点就成为缺点甚至是致命缺点了。但是在客户端-服务端通信中,如果场景不需要保存上下文信息,那么无状态就可以减少一些网络资源消耗,也就是优点了。
    2、可靠传输对我比较重要,减少很多查错的工作。。。
    总结:
    http特点:
    灵活可扩展
        可以扩展头字段实现功能
    可靠传输
        HTTP并不能100%保证数据一定能够发送到另一端,在网络繁忙、连接差等恶劣环境时,也有可能收发失败,可靠只是向使用者提供了一个承诺,会在下层用多种手段尽量保证数据的完整送达
    应用层协议

    请求-应答通信模式
        客户端主动请求,服务端被动响应
    无状态协议
        状态:客户端或者服务器里保存的一些数据或者标志,记录了通信过程中的一些变化信息
        每个请求都是互相独立,毫无关联的,两端都不会记录请求相关的信息

    作者回复: 一直这么认真学习,值得表扬!!

    2019-06-26
    8
  • 火车日记
    一个能打的都没有!!
    缺点:明文传输
    2019-06-26
    5
  • 狼的诱惑
    老师好,有两点疑问
    1、为什么说MQ的比HTTP是高可靠的
    2、个人觉得http的无状态,完全符合可扩展,轻量级、易维护现代设计,属于优点,不算是缺点,为什么大家认为不支持有状态就算是缺点,如果http做成有状态,估计复杂度会非常高吧?
    个人想法,还请老师指正

    作者回复:
    1.mq的设计目的就是消息传输,保证不丢失,为此用了很多的手段,比如消息队列、路由、存储等等。而http的目的不在于此,它的可靠性基于tcp,而tcp不能保证消息100%发送。

    2.无状态有的时候是优点有的时候是缺点,看应用场景,在需要扩展的时候无状态就是优点,在需要会话保持的时候就是缺点。

    3.但无状态可以很容易变成有状态,而反过来就很难,这就体现了http的灵活性。

    2019-07-31
    3
  • http无状态不是特别理解,状态的意思就是一个事物因为外界因素导致这个事物的形态,使用等发生改变,这个就是有状态的吧,http作为一个协议,本质不承载任何东西,只是一个数据的传输通道,即使传输通道里的数据有状态改变,也不能称为是http状态改变,因为理解为无状态,可以这样理解吗?

    作者回复: http协议里的“状态”是指没有规定通信双方需要记录通信过程的上下文信息,与日常生活的“状态”意思是不一样的。

    每次http请求都是独立,无关的,不需要保留状态信息。

    2019-06-29
    3
  • 渴望做梦
    老师,这个顺序发包和顺序收包不是很理解,是是指第一个发送的请求一定会排在第一位处理吗?

    作者回复: 是的,http这种请求-应答模式就是这样,必须第一个有回应后才能处理下一个。

    2019-08-21
    2
  • Cris
    HTTP 完全可以用开玩笑的口吻说:“不要误会,我不是针对 FTP,我是说在座的应用层各位,都是垃圾。” websocket表示不服

    作者回复: WebSocket属于后来的“小字辈”了,而且应用范围比http还是要差很多,不过应该不算是“垃圾”了,笑。

    2019-08-16
    1
  • 彩色的沙漠
    请求应答模式也就注定了HTTP不适合用于IM场景?

    作者回复: 是的,所以就出现了WebSocket。

    2019-06-26
    1
  • 一粟
    终于明白为何是HTTP一统天下了,扬长避短灵活使用才是王道。

    作者回复: √

    2019-06-26
    1
    1
  • ddq432
    我有个问题,http 用 tcp 来尽量保持可靠请求,客户端发送一次请求服务,服务端会发送一个tcp的ack,告诉客户端我收到消息了,假如说这次发送的tcp下的ack信息,客户端没收到,会怎么办

    作者回复: 这个属于tcp协议要解决的问题,如果没有收到ack,客户端就认为是丢包,启用重发机制,再发一次。

    2019-12-05
  • 夏目
    优点:灵活可扩展,其他几个都要看实际场景吧。

    作者回复: 这个是最重要的优点。

    2019-12-01
  • 李鑫磊
    老师,特别困惑的是:HTTP、WebService、RPC、RESTful、gRPC、WebSocket 这几个概念之间的联系和区别,纠结...

    作者回复: 在开头几讲简单介绍了这些概念,要搞清楚的是协议、调用接口、设计风格/规范这些更大范围的概念。

    2019-11-28
  • Geek_steven_wang
    HTTP 是灵活可扩展的,可以任意添加头字段实现任意功能;可扩展是优点,但不严谨也是缺点,就看我们更看中那方面。

    HTTP 是可靠传输协议,基于 TCP/IP 协议“尽量”保证数据的送达;算是优点。

    HTTP 使用了请求 - 应答模式,客户端主动发起请求,服务器被动回复请求;中性,性能稍微弱小和长链接比。
    HTTP 本质上是无状态的,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。扩展方面是优势,但上下文关联需要额额外处理,是弱势。

    作者回复: 总结的不错。

    2019-08-14
  • ly
    一些个人的见解:
    正如文章所说,由于http只规定了报文的基本格式,并没有严格的语法规则,例如header我们可以随便自定义、body可以随便传输什么数据,以后只要时代需要,就会存在无穷的可能(只要以后这些web服务器和客户端进行事先的约定就能实现)。
    http的可靠性完全由下层的TCP协议承担,http无力承担可靠性。
    http对数据的封装,其实就是在数据body的上面加了一个请求行和若干个header(CRLF分隔)。
    http的万能,http可以传输任意的内容,比如文件内容(将FTP秒杀);发送邮件(SMTP秒杀),其根本原因还是HTTP没有严格的要求必须传输什么样的数据,基本上没有限制其应用场景。

    作者回复: 说的非常好,赞!

    2019-08-11
  • 四月的紫色花
    1.就如同开头我讲的那样,你能说一下今天列出的这些 HTTP 的特点中哪些是优点,哪些是缺点吗?
    优缺点是需要看在什么场景下的,整体来说,最大优点应该是它的灵活性可扩展,缺点是它传输的是明文,这个还是他大兄弟https出马来改进的,无状态这种东西应该分场景,大部分情况我觉得是缺点,比如我上网查一个资料的时候,可能需要不停的找,点击各种网页,无状态的话每次都记不住服务器的状态,需要重新连接,会使我的查询时间变长(虽然有时候我们并无感觉,这也可能是由于keepalive这个字段)
    2.不同的应用场合有不同的侧重方面,你觉得哪个特点对你来说是最重要的呢?
    灵活性对开发者来说应该挺重要;我作为一个使用者,可靠性相对重要一点,我不做web测试,具体的应用场合有哪些其实还不能准确的描述出来,在我眼里都是查询就完了😅😂😂
    http特点,灵活可扩展,可靠尽量达,应用无限制,一收一发走天下,状态虽然记不住,但是咱有keepalive😀

    作者回复: 说的很好。

    2019-08-08
  • 无野
    老师,关于小贴士里“出于安全原因,绝大多数网站都封禁了80/8080以外的端口号,只允许http协议穿透,这也是造成http流行的客观原因”,想问个比较stupid的问题:是因为80/8080被放行,http才流行;还是因为http流行,80/8080才被放行?

    作者回复: 这两个应该是互相作用的,就像“鸡生蛋蛋生鸡”一样,没有一个绝对的起点。

    2019-07-07
  • 响雨
    优点:灵活拓展性强
    缺点:明文传输
    因时而异:无状态

    作者回复: 对

    2019-07-04
  • 彧豪
    都是垃圾,断水流大师兄的即视感,哈哈哈

    作者回复: 笑。

    2019-06-27
  • 业余草
    未完待续,迫不及待的想看后面的文章

    作者回复: 循序渐进,学业可成。

    2019-06-27
  • -W.LI-
    灵活可扩张是最大优点吧。
    可靠性比不上MQ,
    传输数据虽然通用,可是文件传输时效率肯定比不是FTP,
    无状态,在需要状态的地方通过扩展弥补不足。
    请求应答,有些需要服务器主动推得需要用websocket协议。

    作者回复: 说的对。

    2019-06-27
  • 业余爱好者
    读到"都是垃圾"那里,忍不住笑了😂

    作者回复: 哈哈。

    2019-06-27
收起评论
23
返回
顶部