透视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协议
登录|注册

02 | HTTP是什么?HTTP又不是什么?

Chrono 2019-05-31
首先我来问出这个问题:“你觉得 HTTP 是什么呢?”
你可能会不假思索、脱口而出:“HTTP 就是超文本传输协议,也就是 HyperText Transfer Protocol。”
回答非常正确!我必须由衷地恭喜你:能给出这个答案,就表明你具有至少 50%HTTP 相关的知识储备,应该算得上是“半个专家”了。
不过让我们换个对话场景,假设不是我,而是由一位面试官问出刚才的问题呢?
显然,这个答案有点过于简单了,不能让他满意,他肯定会再追问你一些问题:
你是怎么理解 HTTP 字面上的“超文本”和“传输协议”的?
能否谈一下你对 HTTP 的认识?越多越好。
HTTP 有什么特点?有什么优点和缺点?
HTTP 下层都有哪些协议?是如何工作的?
……
几乎所有面试时问到的 HTTP 相关问题,都可以从这个最简单的“HTTP 是什么?”引出来。
所以,今天的话题就从这里开始,深度地解答一下“HTTP 是什么?”,以及延伸出来的第二个问题“HTTP 不是什么?

HTTP 是什么

咱们中国有个成语“人如其名”,意思是一个人的性格和特点是与他的名字相符的。
先看一下 HTTP 的名字:“超文本传输协议”,它可以拆成三个部分,分别是:“超文本”“传输”和“协议”。我们从后往前来逐个解析,理解了这三个词,我们也就明白了什么是 HTTP。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《透视HTTP协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(63)

  • 壹笙☞漂泊
    问题一:
    我觉得这种说法是错误的。
        理由:HTTP是在计算机世界里,用于两点之间之间传输超文本的协议。这两点并不限定于是服务器还是浏览器。可以是从浏览器到服务器,也可以从服务器到服务器,也可以是浏览器到浏览器。并不能描述成从服务器到浏览器。
    问题二:
    HTTP不是软件、不是网址(暂时想到的比较少)
    总结:
    协议:HTTP是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式
     传输:HTTP是一个在计算机世界里专门用来在两点之间传输数据的约定和规范
            1、HTTP协议是一个“双向协议”
            2、不限定两个角色,允许有中转或接力A<=>X<=>Y<=>Z<=>B
    文本:完整的有意义的数据,可以被上层应用程序处理
            包括但不限于 文字、图片、音频、压缩包
    超文本:超越了普通文本的文本。是文字、图片、音频和视频等的混合体。最关键的是含有超链接。能从一个超文本跳跃到另一个超文本。形成复杂的非线性、网状的结构关系。

    HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

    HTTP不是互联网、不是编程语言、不是HTML,不是一个孤立的协议
        HTTP通常跑在TCP/IP协议栈之上,依靠IP实现寻址和路由、TCP协议实现可靠数据传输、DNS协议实现域名查找、SSL/TLS协议实现安全通信。此外,还有一些协议依赖于HTTP,例如WebSocket、HTTPDNS等。这些协议相互交织,构成了一个协议网,而HTTP则处于中心地位。

    作者回复: 总结的很好,也很早啊。
    指出一点误解:两个浏览器不能通信。服务器可以当客户端,但浏览器只是客户端。

    2019-05-31
    5
    22
  • 团结屯儿王二狗他二大爺
    所谓的专家是用大家能听懂的语言,把复杂的知识讲明白。看的出来峰哥简单的背后是巨大的知识储备,感觉很用心,不错。期待后面文章能够让大家循序渐进、由浅入深,已关注,哈哈哈

    作者回复: 是啊,讲清楚讲明白太不容易了。

    2019-06-04
    14
  • A-Lang
    这个课程感觉很适合基础的同学学习!不知道后面老师会不会逐渐深入讲解一些深层次的东西

    作者回复: 讲深了当然可以,但如果上来就是RFC估计会“吓跑”很多人,所以还是循序渐进比较好。
    后面的进阶、安全、飞翔都有比较深的干货,有具体的需求也可以提,如果感兴趣的人多就多加点料。

    2019-05-31
    13
  • 小米
    这是我看过的讲HTTP最通俗易懂的文章,忍不住要点赞!

    作者回复: 非常感谢。

    2019-05-31
    12
  • 恩佐
    老师你的知识导图里有错误
    错误在HHTTP/2里的gRPC
    您写的是gRFC

    作者回复: 感谢指正,人老了,手抖了,笑。

    2019-06-18
    5
  • XThundering
    有个小问题,为什么文章说HTTP通常跑在 TCP/IP协议栈之上,请问还有其它协议栈吗?

    作者回复: 有的,比如在UNIX上可以用Domain Socket,还有SSL/TLS。

    2019-05-31
    1
    5
  • 业余草
    作者写的很用心!点赞👍
    HTTP 协议是双向的。服务器 -> 客户端,客户端 -> 服务器。
    期待后面的内容

    作者回复: thanks.

    2019-05-31
    5
  • xing.org1^
    老师您好,请问小结第二条,说http是在两点之间进行传输数据。我的疑惑是:http不是协议吗?我就按照老师的比喻把他理解为“协议”、“合同”了,如果就是纸上的约定,只是一个规范的话,http怎么做传输数据的事情呢?另外http又是怎么做到的呢?

    我的网络知识真的是小白,问的很幼稚还请见谅:)

    作者回复: 你理解的很对,既然是约定,只要大家都遵守,那么协议就生效了。

    就像红绿灯,它只是有颜色转换,怎么就能管理交通呢,你可以对比理解一下。

    计算机依据http的规范去做,发请求收响应,就实现了传输数据。如果不按照http规范,就不能完成通信。

    2019-06-07
    1
    3
  • 不靠谱~
    1 错误的说法,Http可以在任意两点间进行传输。只是从服务器传输到浏览器这种形式比较常见。
    2 http不是一种服务,不是一种语言,不是一种网络。只是一种协议,一种约定。

    感谢老师分享

    作者回复: 对。

    2019-05-31
    3
  • 徐云天
    总而言之,http是一个通信协议,它有它的规范。不会限制在某个平台。任何计算机,都可以使用它。计算机程序之间的通信可以使用它。

    作者回复: good。

    2019-05-31
    3
  • tech2ipo
    老师你好,我想用Linux C++写一个HTTP Client,但有个问题:当我用socket套接字接收HTTP 响应报文时,会调用recv(int sockfd, void *buf, size_t len, int flags);,这里的len填多少合适呢?开源代码里有填1个字节的,也有填4096个字节的,你怎么看这个问题?

    作者回复: len参数是buf的长度,你开了多少就填多少,实际接收到的数据长度在函数返回值里。
    调用示例可以参考Nginx源码的ngx_recv.c。

    2019-05-31
    3
  • 小美
    1. 「用于从互联网服务器传输超文本到本地浏览器」的说法太过片面,HTTP 是在两点之间,即服务端与客户端,而客户端不仅包括本地浏览器,服务器也可以作为客户端,其他的 App、小程序等应用程序也属于客户端。
    2. HTTP 不是软件:HTTP 是没有实体的协议,而软件是一种具体实现。

    作者回复: √

    2019-06-04
    2
  • 余熙
    讲的很有趣!
    一、课后题
    问题一: 我觉得这种说法,协议和超文本的描述是对的。从服务器传输超文本到浏览器是不对的。超文本除了从服务器传输到浏览器、还可以浏览器到服务器(比如上传图片、视频,输入用户信息等)、还可以从服务器到服务器传输。
    问题二:HTTP 不是算法、不是数据结构、不是数据库、不是机房

    二、我的疑问
    问题1 A<===>B 这个表示看起来浏览器既可以是请求方,也可以是响应方。如果浏览器可以作为响应方,什么时候会出现,会有错误标识返回服务器吗
    问题2 websocket 的设计是依赖于 HTTP 的,它是 tcp 上包了壳,那为何要依赖于 HTTP (希望后面有机会得到解答哈)

    作者回复: 1,浏览器只能是请求方,发送请求接收响应。
    2,websocket是为了解决动态html的问题而出现的,应用场景是web,所以用到了http。

    2019-06-02
    2
  • 鲁鹏
    罗老师,您好,有个疑问,HTTP 是在两点之间传输数据,这个「两点」是理解为两个终端设备之间吗?但是,我们学习网络协议,知道数据是一层一层传输,从 A 终端的网络层->....->物理层,然后到 B 终端的物理层->...-> 网络层。而 HTTP 协议在这个过程仅仅能接触到的只是「客户端」以及「传输层协议」呀。所以,这个两点是否能够理解为只是「客户端」和「传输层协议」之间的数据传输?

    作者回复: 网络分很多层次,但在http来看它并不关心,下层是怎么样它都无所谓,在http这一层来看就是两个端点:客户端和服务器,中间经过了多少路由网关是不考虑的。

    这个就是抽象的力量,当然理论上是这么说,实际上当然是层次收发的。

    后面还会讲http与协议栈,到时候可以再问。

    2019-05-31
    2
  • patsun

    HTTP可应用的个体是两个或者两个以上,对象可以是服务器与服务器、服务器与本地浏览器,本地浏览器与本地浏览器。

    http不是网址

    作者回复: 最后一个不对,两个浏览器不能通信。服务器可以当客户端,但浏览器只是客户端。

    2019-05-31
    2
  • 追风者
    透彻
    2019-08-22
    1
  • xing.org1^
    哇,好喜欢这个专栏。收获满满。谢谢老师

    作者回复: thanks。

    2019-06-07
    1
  • qzmone
    1,不准确,http传输的实际上是多媒体资源,HTML只是多媒体资源的一种标识语言。
    2. http是传输协议,不是寻址、隧道、广播等协议。也不是应用程序,编程语音,操作系统等

    作者回复: 第一点,注意还有传输方向、端点用户。

    2019-06-05
    1
  • Amark
    老师,WebSocket协议跟http协议有啥关系?

    作者回复: 到探索篇会讲,简单地说它就是tcp套了个壳,但用http建立连接。

    2019-05-31
    1
  • 一粟
    超媒体传输协议更形象,但“超”字含义不明,不好理解,改成“富媒体”或“多媒体”可否?

    作者回复: 历史原因,改不了,但自己这么理解是没问题的。

    2019-05-31
    1
收起评论
63
返回
顶部