Http协议
1 什么是协议?
提前某一个人或者某些组织提前指定好的规范,大家可以按照规范进行无障碍的交流沟通
两个人之间说话可以互相听得懂,这个就是普通话协议,都是遵守的,所以可以沟通
2 什么是HTTP 协议?
W3C 制定的超文本传输协议(发送数据的一个模板,是提前被制定好的)
- 什么是超文本?
- 不是普通的文本,可以有声音,图片等流媒体信息
- 比如向服务器发送照片存储到服务器中,向服务器上传视屏,都是超文本传输实现的。
- 当然超文本信息都是可以传递的,那么文本信息当然也是可以传递的
- 不是普通的文本,可以有声音,图片等流媒体信息
B S(客户端服务器) 之间使用这种协议进行沟通,可以实现解耦合
- 什么是解耦合?
- 两者之间互相是不依赖的叫做解耦合
3 请求和响应
客户端向着服务器发送请求数据叫做请求
- 请求协议
- 请求的模板
服务器向着客户端发送数据叫做相应
- 响应协议
- 响应的模板
浏览器不依赖具体的服务器
服务器不依赖具体的浏览器
请求协议和响应协议
请求协议
- 请求行
- 请求头
请求中的各种条件以及属性
- 空白行
- 请求体
post请求 (在 post 请求中一般的浏览器在实现的时候,将请求的数据放置到请求体中)
Http 请求协议的具体报文
POST /servlet05/postServlet HTTP/1.1 请求行
Host: localhost:8080 请求头
Connection: keep-alive
Content-Length: 25
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
Origin: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/servlet05/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空 空白行
username=lisi&userpwd=123 请求体
get请求
GET /servlet05/getServlet?username=lucy&userpwd=1111 HTTP/1.1 请求行
Host: localhost:8080 请求头
Connection: keep-alive
sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/servlet05/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行
请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体请求体
响应协议
响应协议报文由下面几个组成部分:
- 状态行
- 响应头
响应中的各种条件以及属性
- 空白行
- 响应体
HTTP/1.1 200 ok 状态行
Content-Type: text/html;charset=UTF-8 响应头
Content-Length: 160
Date: Mon, 08 Nov 2021 13:19:32 GMT
Keep-Alive: timeout=20
Connection: keep-alive
空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行空白行
<!doctype html> 响应体
小结:请求报文以及响应报文
在请求报文以及相应报文中,主要都是包括了三部分:请求报文中有:请求行、请求头、请求体;响应报文中有:响应行、响应头、响应体
HTTP 从浏览器发送访问请求到返回响应数据之间经过的流程
整体的数据传输流程如下所示:
注:上图中表示的是在 HTTP 协议下面的数据传输
上图中涉及到的相关数据包图示
以太网包
IP 包 = IP Head + Data(Data = TCP Head + data)
上图中,除了最下面的 Data ,其余部分都是 IP Head;
TCP 包 、 IP 包与 TCP 包之间的关系
对于计算机网络四层模型的简单介绍:
1、应用层:指定了了应用程序之间交互的规则
2、传输层:保证建立起来连接;
传输层通常有两种传输协议:
- TCP : 有连接的,可靠的传输服务
- UDP : 无连接的,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传输带宽的限制,不需要验证连接是否可靠,虽然传递速度快,但是不稳定。
3、网络层:处理网络上面流动的数据包
4、链路层:网络连接的硬件部分,比如路由器、光纤等
具体的每一层存在的常用的协议有:
在每一层中,都存在相关的协议,目的是为了保证数据的传输满足需要。所谓的数据的传输满足需要指的是:在不同的开发场景中,实现的功能不同,使用的不同层中的协议显然是不同的,通过各个层之间的协议的选择满足自身开发的需要。
举例:开发一个文件传输的网站,那么在应用层就需要使用 ftp 协议,而不是 SMTP 邮箱协议。想要保证数据传输的稳定性以及可靠性,那么就选择使用 TCP 协议而不是 UDP 协议。
通过了各个协议之间的相互协作,使得整个网络世界有条不紊的进行着。
小结
本文从 HTTP 的请求报文以及响应报文出发,简单的阐述了从浏览器输入一条网址,数据经历的所有过程,介绍了现代计算机网络中常用的四层模型,以及四层模型之间存在的相关协议,以及协议之间是怎么相互协作运行的,读完此文,对于 Http 协议以及计算机网络中的四层模型有一个更加深刻的认识。