【极客时间】HTTP 专栏课-罗剑锋

article/2025/10/9 6:01:52

HTTP 专栏课-罗剑锋

🐶 趁毕业之前,系统把计算机知识补充一下。从计算机网络开始,后面会扩展到数据结构、算法设计、设计模式、数据库、软件工程、中间件相关内容。这次先根据罗老师课程补一把计算机网络吧!!

  • 破冰篇之01、02.(2022年10月7日)
  • 破冰篇之03、04.(2022年10月8日)

01 HTTP的前世今生

任职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯 - 李(Tim Berners-Lee)提出了在互联网上构建超链接文档系统的构想。确定三项技术:URI即统一资源标识符,作为互联网上资源的唯一身份;HTML:即超文本标记语言,描述超文本文档;HTTP:即超文本传输协议,用来传输超文本。

Fig1

HTTP0.9开始,设计成文档都是只允许GET动作从服务器上获取HTML文档,并且在响应请求之后立即关闭连接。
HTTP1.0,增加了HEAD、POST新方法,增加了响应状态码,标记可能的错误原因;引入了协议版本号概念;引入了 HTTP Header(头部)的概念,让 HTTP 处理请求和响应更加灵活;传输的数据不再仅限于文本。
HTTP1.1 ,增加了 PUT、DELETE 等新的方法;增加了缓存管理和控制;明确了连接管理,允许持久连接;允许响应数据分块
(chunked),利于传输大文件;强制要求 Host 头,让互联网主机托管成为可能。
HTTP2.0,2015年的,卖点:二进制协议,不再是纯文本;可发起多个请求,废弃了 1.1 里的管道;使用专用算法压缩头部,减少数据传输量;允许服务器主动向客户端推数据;安全性要求加密通信。
HTTP3.0,Google发明QUIC协议,靠这Chrome推动,2018年获得批准

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

HTTP:超文本+传输+协议,就是一个协议
协议的特点:两个以上的参与者、对参与者的一种行为约定和规范。
HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。

传输的特点:
第一:HTTP是一个双向协议,我们把先发起传输动作的 A 叫做请求方,把后接到传输的 B 叫做应答方或者响应方。
第二:数据虽然是在 A 和 B 之间传输,但并没有限制只有 A 和 B 这两个角色,允许中间有“中转”或者“接力”。

超文本的特点:
所谓“文本”(Text),就表示 HTTP 传输的不是 TCP/UDP 这些底层协议里被切分的杂乱无章的二进制包(datagram),而是完整的、有意义的数据,可以被浏览器、服务器这样的上层应用程序处理。超文本的特点就是包含文字、图片、音、视、超链接等。

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

在互联网世界里,HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。

Fig2

03 HTTP 相关概念

在 HTTP 协议里,浏览器的角色被称为“User Agent”即“用户代理”,意思是作为访问者的“代理”来发起 HTTP 请求。

Web Server, HTTP 协议里响应请求的主体,两个层面:硬件和软件
硬件含义就是物理形式或“云”形式的机器,在大多数情况下它可能不是一台服务器,而是利用反向代理、负载均衡等技术组成的庞大集群。
软件:是提供 Web 服务的应用程序,通常会运行在硬件含义的服务器上,

CDN:“内容分发网络”,应用了 HTTP 协议里的缓存和代理技术,代替源站响应客户端的请求
优点:简单来说,它可以缓存源站的数据,让浏览器的请求不用“千里迢迢”地到达源站服务器,直接在“半路”就可以获取响应。如果 CDN 的调度算法很优秀,更可以找到离用户最近的节点,大幅度缩短响应时间。

爬虫:
Fig3

  1. 你觉得 CDN 在对待浏览器和爬虫时会有差异吗?为什么?
    CDN 应当是不区分的,因为爬虫本身也是对 Web 资源的访问,且对于爬虫识别并不是 100% 准确的,因此 CDN 只会去计算实际使用了多少资源而不管其中多少来自爬虫;
  2. 你怎么理解 WebService 与 Web Server 这两个非常相似的词?
    Web Service 是网络服务实体,而 Web Server 是网络服务器,后者的存在是为了承载前者。

04 HTTP 相关的各种协议

Fig4
TCP/IP

IP 协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。

DNS:
HTTPS:HTTP over SSL/TLS,SSL 使用了许多密码学最先进的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术
代理:代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。

  1. 匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器;
  2. 透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;
  3. 正向代理:靠近客户端,代表客户端向服务器发送请求;
  4. 反向代理:靠近服务器端,代表服务器响应客户端的请求;

代理在传输过程中插入了一个“中间层”
5. 负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;
6. 内容缓存:暂存上下行的数据,减轻后端的压力;
7. 安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器;
8. 数据处理:提供压缩、加密等额外的功能。

05丨常说的“四层”和“七层”到底是什么?

TCP/IP protocol

Fig5

  • 链路层,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层
  • “网际层”或者“网络互连层”,
  • “传输层”(transport layer)保证数据在 IP 地址标记的两点之间“可靠”地传输
  • “应用层”(application layer)

数据包:MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)

OSI 网络分层模型

Fig6

TCP/IP 和 OSI 模型的关系

Fig7

06 | 域名里有哪些门道?

域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边的被称为“顶级域名”,然后是“二级域名”,层级关系向左依次降低。

DNS 的核心系统是一个三层的树状、分布式服务,基本对应域名的结构

  1. 根域名服务器(Root DNS Server):管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的 IP 地址;
  2. 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如 com 顶级域名服务器可以返回 apple.com 域名服务器的 IP 地址;
  3. 权威域名服务器(Authoritative DNS Server):管理自己域名下主机的 IP 地址,比如 apple.com 权威域名服务器可以返回 www.apple.com 的 IP 地址。

“缓存”:(1)网络运行商提供“野生”服务器被称为“非权威域名服务器”,可以缓存之前的查询结果,如果已经有了记录,就无需再向根服务器发起查询,直接返回对应的 IP 地址。(2)操作系统缓存

课下作业

  • 在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www. 不存在.com”,试着解释一下它的 DNS 解析过程。
    答题方向:浏览器缓存 操作系统缓存 host文件 根域名 顶级域名 返回失败
  • 如果因为某些原因,DNS 失效或者出错了,会出现什么后果?

07丨自己动手,搭建HTTP实验环境

软件安装wireshare、openresty(http://openresty.org/en/download.html)、telnet客户端、chorme


基础篇

08丨键入网址再按下回车,后面究竟发生了什么?

  1. HTTP 协议基于底层的 TCP/IP 协议,所以必须要用 IP 地址建立连接;
  2. 如果不知道 IP 地址,就要用 DNS 协议去解析得到 IP 地址,否则就会连接失败;
  3. 建立 TCP 连接后会顺序收发数据,请求方和应答方都必须依据 HTTP 规范构建和解析报文;
  4. 为了减少响应时间,整个过程中的每一个环节都会有缓存(包括本地浏览器缓存、系统host缓存、cdn缓存),能够实现“短路”操作;
  5. 虽然现实中的 HTTP 传输过程非常复杂,但理论上仍然可以简化成实验里的“两点”模型。

课下作业
你能试着解释一下在浏览器里点击页面链接后发生了哪些事情吗?

这一节课里讲的都是正常的请求处理流程,如果是一个不存在的域名,那么浏览器的工作流程会是怎么样的呢?

09 | HTTP报文是什么样子的?

HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:

  • 起始行:描述请求或响应的基本信息;
  • 头部信息:key-value 形式
  • 消息正文:实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

有的 http 包,只有包头,消息正文是空的,这种情况如果包头很大会占用占用大量的服务器资源,影响运行效率

  1. 请求行(起始行):简要地描述了客户端想要如何操作服务器端的资源。有三个部分
    请求方法、请求目标(URI,标记请求方法要操作的资源)、版本号
    GET / HTTP/1.1

状态行
响应报文里的起始行,在这里它不叫“响应行”,而是叫“状态行”(status line),意思是服务器响应的状态。
由三个部分组成。版本号、状态码、原因
状态行:Version | SP | Status Code | SP| Reason|CRLF
HTTP/1.1 200 OK

  1. 头部字段
    头部字段是 key-value 的形式,用“:”分隔,不区分大小写,顺序任意,除了规定的标准头,也可以任意添加自定义字段,实现功能扩展;
    HTTP/1.1 里唯一要求必须提供的头字段是 Host,它必须出现在请求头里,标记虚拟主机名。
    头部字段需要注意
  • 字段名不区分大小写,例如“Host”也可以写成“host”,但首字母大写的可读性更好;
  • 字段名里不允许出现空格,可以使用连字符“-”,但不能使用下划线“_”。例如,“test-name”是合法的字段名,而“test name”“test_name”是不正确的字段名;
  • 字段名后面必须紧接着“:”,不能有空格,而“:”后的字段值前可以有多个空格;
  • 字段的顺序是没有意义的,可以任意排列不影响语义;
  • 字段原则上不能重复,除非这个字段本身的语义允许,例如 Set-Cookie。

课下作业
如果拼 HTTP 报文的时候,在头字段后多加了一个 CRLF,导致出现了一个空行,会发生什么?(当作body处理)
讲头字段时说“:”后的空格可以有多个,那为什么绝大多数情况下都只使用一个空格呢?(节省资源)

10 | 应该如何理解请求方法?

目前 HTTP/1.1 规定了八种方法,单词都必须是大写的形式,我先简单地列把它们列出来,后面再详细讲解。

GET:获取资源,可以理解为读取或者下载数据;
HEAD:获取资源的元信息;
POST:向资源提交数据,相当于写入或上传数据;
PUT:类似 POST;
DELETE:删除资源;
CONNECT:建立特殊的连接隧道;
OPTIONS:列出可对资源实行的方法;
TRACE:追踪请求 - 响应的传输路径。


http://chatgpt.dhexx.cn/article/PE0qlR6G.shtml

相关文章

专访:平安科技首席架构师金新明和他的程序人生

【CSDN 编者按】从改革开放后提出金融电子化,到如今新一代技术与金融的融合创新,近半个世纪以来,国内外金融科技究竟如何发展?为了回答这个问题,我们请到了平安科技首席架构师金新明,通过对他经历丰富的技术…

李剑锋

李剑锋7827 哈哈!!国庆快快乐乐!!!!看我的白马!lijianfeng2 lijianfeng2 ,lijianfeng2 转载于:https://blog.51cto.com/248835/44664

《罗剑锋的c++实战笔记》总结

一、概论 本节可以看清楚C复杂的本质,理解程序运行机制和面向对象编程思想。 1.重新认识C:生命周期和编程范式 (1)生命周期 一个C程序从诞生到消亡要经历的阶段: 在上图中的编译过程中,编译器还会根据…

《 罗剑锋的C++实战笔记 》

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 生命周期和编程范式秀出好的code style宏定义和条件编译属性和静态断言怎样才能写出一个“好”的类?const/volatile/mutable:常量/变量究竟是…

西门子CP243通信控件

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 该控件经过多年现场运用,功能完善可靠,可…

叶帆哥哥的第一个wince驱动——FakeGPS 驱动

早在两年前就开始做WINCE应用程序了,但是由于分工的原因,一直以来都没有机会深入了解WINCE 驱动层面的开发(包含PB相关的系统定制)。要不是前段时间马宁安排了FakeGPS开发工作,真不知道什么时候才能了解WINCE驱动开发。…

【阿里云IoT+YF3300】11.物联网多设备快速通信级联

我们见到的很多物联网设备,大都是“一跳”上网,所谓的“一跳”就是设备直接上网,内嵌物联网模块或者通过DTU直接上网。其实稍微复杂的物联网现场,往往网关下面连接若干物联网设备(如下图),并且这…

脚本语言运用(VBScript)叶帆

脚本语言运用(VBScript) VBScript 使用 ActiveX(R)脚本与宿主应用程序对话。使用 ActiveX Script,浏览器和其他宿主应用程序不再需要每个脚本部件的特殊集成代码。ActiveX脚本使宿主可以编译 Script、获取和调用入口点及管理开发者可用的命名空间。通过 ActiveX Scr…

叶帆密码箱简介

************************************************************ 叶帆软件系列 **** 叶帆密码箱 **** …

史上最全wireshark使用教程,8万字整理总结,建议先收藏再耐心研读

目录 第 1 章 介绍... 1 1.1. 什么是Wireshark. 1 1.1.1. 主要应用... 1

【认识】wireshark使用教程

本文章,是简单粗暴学习Wireshark的抓包功能后,记录的一些笔记。 1 Wireshark简介及抓包原理及过程 1.1 简介 Wireshark是1个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用…

超详细的 Wireshark 使用教程

一、wireshark是什么? wireshark是非常流行的网络封包分析软件,简称小鲨鱼,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。 wireshark是开源软件,可以放心使用。可以运行在Windows和Mac OS上。对应的…

【最详细】Wireshark使用教程

【最详细】Wireshark使用教程 原理步骤1.安装2.wireshark使用3.先看几个数据包,熟悉一下wireshark4.wireshark过滤规则4.1 地址过滤4.2 端口过滤4.4 其他常用过滤5.流查看6.数据包保存 说明总结 原理 wireshark是一款网络嗅探工具。可以监视网络的状态、数据流动情…

Wireshark 使用教程

一、wireshark的安装: 在官网下载后运行安装程序,一直下一步即可,安装完成。 二、wireshark开始抓包: 1、打开wireshark 3.0.1,主页面如下: 2、双击需要抓包的网卡: 3、双击打开后就已经开始了抓包工作: 4、执行需要抓包的操作,如:ping www.baidu.com: 5、抓包完…

wireshark抓包工具详细说明及操作使用

wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。 为了安全考虑,wireshark只能查看封包,而不能修改…

wireshark使用教程

文章来源:https://blog.csdn.net/qq_30682027/article/details/83021901 文章目录 1. 安装 2. 使用技巧 2.1. 捕获过滤器表达式 2.2. 开始捕获 2.3. 捕获结果 2.3.1. 着色规则 2.3.2. 数据包的大致结构 2.3.3. 示例 2.3.3.1. 三次握手 2.3.3.2. 四次挥手 2.3.3.3. …

Wireshark软件使用教程

Wireshark软件使用教程 Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括: 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单…

Wireshark详细使用教程

简介 Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。WireShark可以比喻做硬件工程的万用表、示波器,同样我们…

Wireshark零基础使用教程(超详细)

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「专栏简介」:此文章已录入专栏《网络安全快速入门》 Wireshark零基础使用教程 一、Wireshark是什么二、Wireshark抓包原理三、W…

@NotNull

这里平时写实体类后Controller层接收了都是用if(XXX!null){}来判断是否为空这样显然代码冗余性 这里如果在实体类的这个属性上面NotNull既可以完成这个判断 记录一下 我们来定义这个Person,这里username不能为null就这么注释 这里 浏览器输入 控制台打印