网络原理(2):HTTP协议初识
文章目录
- 网络原理(2):HTTP协议初识
- 观前提醒
- 1. http协议的引出
- 1.1 http协议是什么
- 1.2 http协议的重要性
- 1.3 https是什么意思
- 1.4 http协议的工作模式(一问一答)
- 其他的工作模式
- 2. HTTP 协议的报文格式
- 2.1 抓包工具及其作用
- 抓包工具的选择(Fiddler)
- 2.2 Fiddler 的安装和使用
- 2.3 抓包结果
- 2.4 HTTP请求
- 首行
- 请求头(header)
- 空行
- 登录请求:包含正文
- 正文(body)
- 2.5 HTTP响应
- 首行
- 响应头(header)
- 空行
- 正文(body)
- 2.6 格式总结
- 3. 总结:
观前提醒
如果你是第一次点击进来这篇博客,推荐你可以先看看这篇博客:网络原理(1):TCP/IP五层模型 – 应用层(自定义协议的两个阶段,约定信息组织的四种格式)
当然,不看上面这篇博客,也行的。
1. http协议的引出
上面这篇博客中讲到,程序员在 应用层 中,可以自定义协议。
那么,除了自定义的协议之外,也有一些大佬们已经搞好的协议,比如:
FTP协议,属于是 文件传输 SSH协议,属于是 远程操作主机 telnet协议,属于是 网络调试工具 SSL协议,属于是 网络安全 ......还有很多其他功能的协议。
但,这么多协议里面,我们学习网络,一定要学会的,要重点掌握的是:HTTP 协议
1.1 http协议是什么
HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的应用层协议。
HTTP 诞生与1991年。目前已经发展为最主流使用的一种应用层协议。
目前我们主要使用的还是 HTTP/1.1 和 HTTP/2.0。
HTTP/1.1,虽然是 20 年前的东西,但目前仍是最流行的HTTP 的版本。
最新的版本是 HTTP/3.0,但是普及程度不高。
如果对 HTTP协议 的发展感兴趣的,可以观看别人写的这篇博客:HTTP 的成长史(HTTP1.0,HTTP2.0, HTTP3.0,HTTPS)
1.2 http协议的重要性
为什么说一定要学?
因为HTTP协议,是当前Web 开发中,最核心的协议。
换句话说:使用任何网址,都会用到 http,Spring,围绕着 http 转。
此时,我们随便访问一个网址,比如百度。
然后复制它的网址:https://www.baidu.com/
1.3 https是什么意思
我们可以看到,https://www.baidu.com/ ,这个网址的最前面,是 https,那就会有同学问了,为什么不是 http 呢?
什么又叫做 https?
其实,https,是在 http 协议的基础上,套上了一层安全层。
https = http基础上 + 安全层(s 表示的是安全层)
安全层,也就是上面提到的SSL协议,负责网络安全的。
如果想要了解 https,就需要先了解 http,因为这两者之间,就相差了一个安全层。
1.4 http协议的工作模式(一问一答)
http协议的工作模式,属于是一问一答的工作模式。
例如:客户端发一个请求,服务器就返回一个响应
也就是,请求和响应是一一对应的。
一问一答,就比如你和你的暗恋对象聊天:
你:你今天吃饭了吗?
你的暗恋对象:吃了
你:你在干嘛?
你的暗恋对象:闲着玩手机
你:明天去看电影吗?
你的暗恋对象:不去
你:你今天开心吗?
你的暗恋对象:我去洗澡了
这样的聊天,就是典型的一问一答。
浏览器打开网页的场景,手机APP加载数据的场景,
就是典型的一问一答的场景。
此时,使用HTTP协议,就非常合适了。
其他的工作模式
网络通信中,也有其他的工作模式,例如:
- 多问一答
典型的例子:上传大文件
文件太大,就会拆分成多份请求,上传服务器,整体上传完毕,服务器就会返回一个响应。
- 一问多答
例如:下载大文件
你下载一个大文件,点击下载,文件太大,就会拆成多份数据,进行下载。
- 多问多答
例如:远程电脑
你这边的鼠标键盘,发送多个请求,远程的电脑,显示的画面,或其他的,就会根据你的请求,返回不同的画面或者其他的响应。
2. HTTP 协议的报文格式
想要进一步的了解 HTTP协议,我们还需要先了解 HTTP 协议的报文格式。
其实,学习其他协议,也是先学习它的报文格式,接着了解这个协议本身的特性。
2.1 抓包工具及其作用
那么,在学习http协议的报文格式之前,我们还需要安装一个工具:抓包工具
抓包工具的作用是什么呢?
抓包工具能够获取到网络的数据包,并且能把详细的格式都解析出来。
这样我们看网络通信的数据,就能够看懂了,从而方便我们进行学习。
抓包工具相当于一个 “代理”。
什么意思?
我们举个例子:
到中午饭点了,我想要吃汉堡,但是我不想下床自己去买,此时,我的舍友,刚好要出门去买饭,我就拜托我舍友,去帮我买个汉堡。
舍友就相当于一个 “代理”。
那么,我舍友,是非常清楚,我和老板之间,用多少钱,买了一个什么样的汉堡。
我们讲的抓包工具,是一个软件。
安装这个软件之后,我们电脑上所有的网络通信,都会先发给这个抓包程序,抓包程序再把数据,转发给(服务器 / 客户端)。
抓包工具运行起来,一般是不会影响其他软件使用网络的。
但是,不排除特殊软件会产生冲突,例如:梯子类的软件。
抓包工具的选择(Fiddler)
抓包工具我们介绍过了,但是,市场上这么多抓包工具,我们应该选择哪个呢?
例如:wireshark,是一款非常知名的抓包工具
这个工具,能抓很多协议,如:HTTP,TCP,UDP,IP,以太网数据帧… …
但是,我们不使用它,因为它的使用门槛,比较高,不适合新手使用,太麻烦了。
我们此处采用的抓包工具,使用 Fiddler。
Fiddler,这个抓包工具,是专门抓 HTTP的。
它的功能更简单,但是,足够用了,对于新手来说,比较友好。
2.2 Fiddler 的安装和使用
由于它的安装和使用教程,和这篇博客,没有什么直接的关系,所以,我将它的安装,独立分成一篇博客:抓包工具:Fiddler 的安装
并且,如何使用 Fiddler 进行抓包,如何查看访问一个网页时,发送的请求和响应,我也独立了一篇博客出来:
Fiddler 的简单使用,使用Fiddler 查看请求和响应
建议看完这两篇博客之后,再回来看这篇博客。
2.3 抓包结果
我们使用 Fiddler 抓包之后,有两种不同的结果,分别是 HTTP的请求 和 HTTP的响应。
我们就以访问 搜狗 为例子,进行讲解。
2.4 HTTP请求
首先,我们打开 Fiddler,然后输入 sogou.com 这个网址,访问搜狗。
我们点击关于搜狗的那一条蓝色记录,使用记事本查看请求信息,是这样一条信息:
接下来,我们需要初步了解,请求中的结构,是怎么样的。
我们这里直接说了,HTTP请求中包含四种结构:
- 首行
- 请求头(header)
- 空行
- 正文(body)
首行
首行,顾名思义,就这 HTTP请求 中的第一行:
首行中,又包括了三个信息,这三个信息,之间使用 空格 进行分隔的:
- 请求方法
例如上面图片中红色框框的第一个单词:GET
请求方法,其实就是表示我们这个请求,到底要做什么事情。
向我们这里的GET,顾名思义,就是 “获取” 的意思。
以 搜狗 为例子,就是要获取 搜狗 服务器上的资源。
类似的请求方法,还有很多,我们在这篇博客中详细介绍:
网络原理(4):HTTP协议 – HTTP请求 – 首行(请求方法)
- URL
例如上面图片中,GET 后面的那一串信息:https://www.sogou.com/
URL的全称叫做:统一资源定位符(也可以说唯一资源定位符)。
这是用来描述网络资源的一种方式。
它的介绍,我们将在这篇博客中详细介绍:
网络原理(3):HTTP协议 – HTTP请求 – 首行(URL)
- HTTP协议 的版本号
例如上面图片中,URL 之后的:HTTP/1.1
文章最开始也说过了,HTTP协议的版本,已经达到了 3.0,但是,普及程度很低。
原因就是说,新的东西,不稳定,有坑,没有太多公司敢去用,怕造成损失。
以上就是首行的部分。
请求头(header)
请求头的内容,是以键值对的方式,进行组织的。
每一行,是一个键值对。
键值对 和 键值对 之间,是以 \n,也就是换行,来进行分隔的。
每一个键值对的键(Key)和 值(Value)之间,是以“ :空格 ” 的方式进行分隔的。
仔细看看,就可以看出,键 和 值 之间,是使用 “:空格” 的方式进行分割。
也就是:键: 值
你可以很明显的看出,‘:’ 后面,很明显有一个空格。
HTTP请求头 中的 键(Key)有哪些取值,值(Value)又有哪些取值,都是由标准约定好的。
HTTP请求 和 HTTP响应,报头中的常见属性的讲解博客,我编写了一个博客,里面存放着常见属性的博客链接:
网络原理(✨✨✨):HTTP协议 – HTTP请求和HTTP响应,常见的属性目录博客
空行
由于我们访问 搜狗 的这个网页,是没有正文的。
所以,这个空行,就不明显了。
那么,大多数的请求,都是没有正文的,在其他的情况下,是有正文的,比如:在某一个网站上,进行账号登录的时候。
登录请求:包含正文
比如,我登录我的 Gitee 账号:
这个登录请求,就包含了正文,同时,你注意到,正文 和 请求头之间,有一行空白,那个就是空行
空行的作用:用来标记,header部分,已经结束了。
请求头(header)中,有很多个键值对,但是,键值对有可能存在无数个,那么,服务器读取请求并解析请求的时候,需要有一个标识符,来表示,header部分,结束了。
空行的作用,是很关键的。
正文(body)
正文,也叫做 body。
正如上面说的:大多数的请求,都是没有正文的,在其他的情况下,是有正文的,比如:登录,更换账号信息
我们重新登录一次 Gitee 账号:
我们以我本人的 Gitee 账号为例子,更换一下我账号的头像:
大家可以多抓包,感受一下,哪些请求,是带有正文的。
2.5 HTTP响应
仍然以 搜狗 为例子。
先打开 Fiddler,然后进入 搜狗 页面,搜索 NBA。
通过 Fiddler,抓取这个这个响应页面的信息。
我们查看响应的信息:
HTTP响应中,同样包含四种结构:
- 首行
- 响应头(header)
- 空行
- 正文(body)
首行
可以看到,HTTP响应 的首行,和 HTTP请求 的首行,有点不一样。
HTTP响应的首行,包含了这三部分,都是用 空格 分隔开的:
- HTTP 的版本号
如图片所示的 HTTP/1.1。
- 状态码
这个状态码,表示的是我们 HTTP请求 的处理结果。
常见的状态码,和它表示的意思,我先列出来:
2XX:表示成功
3XX:重定向
4XX:客户端错误(请求有问题,比如:参数错误,路径错误,格式错误)(通过浏览器访问服务器)
5XX:服务器错误(服务器端代码,存在 bug)
- 状态描述
状态描述:对状态码的简短描述,例如OK或Not Found
关于状态码和状态描述,目前,先不展开说了,我们将在这篇博客中,再详细介绍:
网络原理(6):HTTP请求 – HTTP报头(Referer,状态码)
响应头(header)
HTTP请求中,叫做 请求头,HTTP响应中,叫做 响应头。
都可以称为 header。
和 请求头 一样,都是由 键值对 的方式组织的
只不过,响应这里,涉及到的 键值对 和请求的键值对,是有区别的(有些重要的键值对,可能同时存在于 请求和响应 当中)
空行
和 HTTP请求 一样,HTTP响应,同样有 空行。
它的作用和 HTTP请求 那里,是一样的。
都是 标识 header部分 的结束。
正文(body)
最下面的那一段信息,就是正文,也叫 body。
对于这个响应来说,正文(body) 是一个 html,对于正文来说,还可以是 CSS,js,图片转码后的信息,音频 等等,可以有很多种情况。
2.6 格式总结
对于 HTTP 的报文格式,我们可以总结一下:
HTTP是一个文本格式的协议。
分别有 HTTP请求 和 HTTP响应。
HTTP请求,包含下面四个部分:
- 首行
- 请求头(header)
- 空行
- 正文(body)
HTTP响应,同样包含四个部分:
- 首行
- 响应头(header)
- 空行
- 正文(body)
这些格式,面试的时候,不会单独考,但是,我们进行网络编程的时候,进行开发和调试的时候,会用到。
这些基本的格式,需要重点掌握,后续,我们将分成博客,单独讲解 HTTP请求和HTTP响应 中,常见的属性,和具体的含义。
3. 总结:
这篇博客,我们主要介绍了 http协议,它是什么,有多重要,是什么意思,工作模式是怎么样的,以及它的 报文格式。
后续,我们将针对它的基本格式,对每个基本格式,进行讲解。
这是 HTTP请求 和 HTTP响应,常见的属性及其含义 的目录博客的链接:
网络原理(✨✨✨):HTTP协议 – HTTP请求和HTTP响应,常见的属性目录博客
你们可以在这篇博客中,根据我放置的博客链接,点击跳转,学习HTTP请求 和 HTTP响应,常见的属性的讲解博客。
最后,如果看完这篇博客,你有所收获,请给我点点赞,如果这篇博客有错误的地方,或者你有什么意见,也欢迎指出!