了解HTTP协议
HTTP协议(全称为"超文本传输协议")是处于TCP/IP五层协议栈的 应用层协议,HTTP在传输层是基于TCP的(HTTP/1 HTTP/2 是基于TCP,最新版本的HTTP/3 是基于UDP–但是当下互联网上绝大部分使用的HTTP都是HTTP/1.1,所以就这么叫)
在前面我们了解到,传输层协议,主要关注的是 端对端 之间的数据传输.
应用层协议,则是要站在程序应用的角度,要对传输的数据,来进行具体的使用,在很多的时候,应用层协议都是程序员自定制的(根据实际的需求场景,来设计协议)
只要你打开浏览器,随便一个网站,这个时候就会用到HTTP,或者是打开一个手机APP,随便加载一些数据,也会用到,所以说,HTTP具体的应用场景,基本上大家天天都在用
像我们之前学的UDP:报头(源端口,目的端口,长度,校验和) + 载荷
UDP/TCP/IP 这些协议都是属于"二进制"的协议
HTTP 则是一个文本格式的协议(不需要去理解具体的二进制位,而是理解文本的格式即可,这是方便我们用肉眼观察的)
我们可以借助一些"抓包工具"来具体查看 HTTP的报文格式
抓包工具,这是类似于"代理"一样,这个代理就相当于一个传话的(你在沙发上想买一瓶可乐来喝,你喊你的弟弟(妹妹)去帮你买,本来是应该你对老板说来瓶可乐,变成了从你弟弟(妹妹)口中说出来了,然后他们再把可乐拿给你(就是让请求和响应,都要经过"代理")),我们这里的抓包工具使用Fiddler
响应
响应也分成4个部分
1:首行:包含了三个部分
a)版本号 (HTTP/1.1)
b)200 状态码,描述了这个响应,是一个表示"成功的"还是"失败的",以及不同的状态码,描述了失败的原因
c)OK 状态码的描述,通过一个/一组简单的单词,来描述当前状态码的含义
2:响应头(header)
也是键值对结构,每个键值对占一行,每个键和值之间使用: 空格 来分割
响应头中的键值对个数,也是不确定的,不同的键值对表示不同的含义
3:空行
表示响应头的结束标记
4:响应正文(body)
服务器返回给客户端的具体数据,这里的东西可能有各种不同的格式,其中,我们最常见的格式就是 html!