目录
一.含义:
HTTP协议(超文本传输协议)--一个规则(规定了浏览器(客户端)同服务器之间通信的规则)
二.过程:
1.建立连接;
2.进行传输;
3.断开连接.
注意:这个过程是客户端主动开始的.
在日常生活中的体现就是:当我们在浏览器中搜索想要查找的东西开始,到浏览器显示出结果结束,从开始到结束的过程就是上边的三个过程.
三. 过程详解:
1.建立连接(三次握手)
第一次握手:客户端向服务器发送建立连接的请求
第二次握手:服务器向客户端做出响应可以连接
第三次握手:客户端向服务器发送表示收到
2.开始传输
此时客户端可以向服务器进行传输
请求和响应
- 客户端给服务器发起请求
- 服务器向客户端做出响应
向服务器发送的请求里面需要包含四个部分
- 请求行
- 请求头
- 请求空行
- 请求主体
查看所有请求信息
请求详细信息:
有请求(headers)和响应(respance)信息
resquest就是请求的信息
请求行
请求行中包含三个内容:请求方式,请求路径,请求协议和版本
请求方式
[node.js获取请求方式(req.method)----请求路径(req.url)---请求头(req.headers)]
-
get:参数会暴露在地址栏;数据有大小限制,最大4kb;数据只能进行url编码;get请求会被记录在历史记录;可能会被浏览器缓存。语义用于获取服务器端数据。常见的get请求包括:
-
在地址栏输入数据敲回车
-
点击a标签跳转
-
html中引入图片、引入css、引入js、引入html地址
-
form默认的提交方式,也可以设置get提交方式
-
-
post:参数不会暴露在地址栏;数据大小没有限制;数据可以不经过url编码,可以是其他格式数据;post不会被记录在历史记录;不会被浏览器缓存。语义用于给服务器提交数据。常见的post请求:form标签的post提交方式
-
put:语义用于请求服务器修改数据
-
delete:语义用于请求服务器删除数据
请求路径(url)
请求路径永远是"/"开始
完整的请求路径是:协议+身份+IP地址+端口号+路径+参数
请求协议和版本
协议:http/https/ssh/ftp/sftp/mongodb/mysql......
请求头
是一些键值对,表示请求的信息
含义:
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 # 告诉服务器当前客户端可以接收的文档的类型。其实这里包含了*/*,就表示什么都可以接收;
Accept-Encoding: gzip, deflate, br # 客户端支持的编码
Accept-Language: zh-CN,zh;q=0.9 # 当前客户端可以支持的语言,在浏览器的工具->选项中可以得到相关信息
Cache-Control: max-age=0 # 缓存机制
Connection: keep-alive # 客户端支持的连接方式,保持一段连接,默认为3000ms
Host: localhost:3000 # 请求的主机名为localhost:8080,url中的host部分,包含hostname和port
Sec-Fetch-Dest: document # 告诉服务器 浏览器如何使用获取的数据
Sec-Fetch-Mode: navigate # 表示这是一个浏览器的页面切换请求
Sec-Fetch-Site: none # 表示一个请求发起者的来源与目标资源来源之间的关系,因为直接敲回车打开的,所以没有目标来源
Sec-Fetch-User: ?1 # 表示导航请求由用户激活触发(鼠标点击/键盘)
Upgrade-Insecure-Requests: 1 # 表示这个请求不安全,可以跟服务器协商升级为https协议
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 # 告诉网站服务器,访问者是通过什么工具来请求的,其中包含系统和客户端信息
sec-ch-ua: "Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24" # user-agent的补充,怕user-agent泄漏客户端信息而做出的补充
sec-ch-ua-mobile: ?0 # 是否是移动设备
sec-ch-ua-platform: "Windows" # 系统
请求空行
本身没有什么具体内容,作用就是为了截取内容
请求主体
客户端向服务器发送请求是携带的参数(用户名,密码框......)
不同的请求方式所携带参数的方式不同
1.get请求的请求体就是在地址栏中问号后边的内容
2.post请方式的请求体
拓展:
req有on方法用于绑定事件,数据的传送是分成每一小部分传递的
data事件,当有一小部分数据传递过来时触发,其中参数chunk代表这一小部分数据,默认格式为buffer
end事件,当数据传送完毕后触发
整个过程是异步的
二.响应:
http规定,服务器接收请求后,要对客户端进行响应。http规定响应信息必须遵循响应报文的规则。响应报文规则包含3部分内容:
-
响应行
-
响应头
-
响应主体
响应行
响应行包含3部分:
-
协议和版本
-
状态码
状态码是http协议规定用来描述这次请求,服务器给出响应的状态,http请求共有5中响应状态:
-
1xx:代表请求已被接受,需要继续处理
-
2xx:代表请求已成功被服务器接收、理解、并接受
-
3xx:代表需要客户端采取进一步的操作才能完成请求
-
4xx:代表了客户端看起来可能发生了错误,妨碍了服务器的处理
-
5xx:代表了服务器在处理请求的过程中有错误或者异常状态发生
-
响应头
Date: Sun, 27 Nov 2022 02:11:46 GMT # 响应时间
Connection: keep-alive # http1.1版本可以允许客户端和服务器持续连接,下次请求可免除重复断开请求的过程,节省连接效率
Keep-Alive: timeout=5 # 表示这个持续的连接可以保持5秒
Content-Length: 18 # 服务端给客户端的数据长度
响应主体
服务器给客户端响应的内容
3.断开连接
四次挥手:
客户端和服务器结束通信断开连接的过程
第一次挥手,客户端主动向服务器发起断开请求
第二次挥手,服务器收到断开请求
第三次挥手,服务器做好断开准备,通知客户端可以断开,断开后销毁此次请求信息,携带回应信息
第四次挥手,客户端断开,发送断开结果