「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。
一、http协议
1.1 什么是http协议?
http(HyperText Transfer Protocol): 超文本传输协议:在客户端和服务器端不仅可以进行文本传输,还可以传递图片,音视频;是浏览器和服务器端之间约定好了的一种规范;双方按照规范传递和接受数据;
- https: 加密的传输协议;更安全,在协议中增加了秘钥,不容易被拦截和篡改,大多数对安全有要求的都会使用https;
 
http: 就像运行在客户端和服务端的快递小哥,可以把客户端的信息传递给服务器(请求: request),然后把服务器整理好的数据通过http协议发送给服务端(响应response);
1.2 前后端交互模型
- 在浏览器总输入一个url,到用户看到页面都经过了什么?
 
1.2.1 http 请求阶段
- 浏览器得到地址栏中的地址,发送给DNS服务器
 - DNS服务器进行域名解析,找到域名对应的IP地址
 - 把客户端的请求发送给上一步查出来的服务器地址
 
1.2.2 http 响应阶段
- 服务器接收到请求后,根据请求的信息,进行资源的整理,并且把响应的资源通过http返回给客户端(数据或者html、js、css文件等);
 - 根据资源的类型不同,浏览器会进行不同的操作,如html和css进行解析渲染,js进行解析并执行;
 
1.2.3 浏览器的渲染阶段
- 解析html文件形成DOM树根据节点间关系组织树的节点关系;
 - 解析CSS形成CSS树
 - 把DOM树和CSS树组合形成render树
 - 接下来交给显卡,绘制成页面;
 
二、http的三次握手和四次挥手
http 协议建立和断开连接时不是一次就完成的,连接时而是通过三次握手,断开时要经历4次挥手;
2.1 三次握手
- 第一次握手:客户端发送syn码数据包给服务器,客户端要求和服务器建立连接;
 - 第二次握手:服务端接收到连接请求后,会发送ack码数据到客户端,表示你的连接请求已经收到,再次询问客户端是否确认建立连接
 - 第三次握手:客户端收到服务器的ack码后,检验是否正确,如果正确则再次发送ack给服务器,表示确认连接;
 - 三次握手如果成功,客户端和服务端的连接成功建立,才会开始传递数据;
 
2.2 四次挥手:
- 当客户端发送数据结束后,会发送fin告知服务器,客户端要给服务器的数据传输完了;
 - 服务端返回给客户端一个ack码,告知客户端已经知道数据传递完成。客户端收到ack,就会把发送到服务端的通道关闭;
 - 服务端数据传输结束后,也会发送fin给客户端;
 - 当客户端收到fin后,会发送ack给服务端,表示客户端知道服务端已经发送完毕,服务器收到ack后就可以放心的关闭数据传输通道;
 
三、uri/urn/url
- URI: 统一资源标识符
 - URN: 同一资源成名
 - URL: 同一资源定位符;
 
3.1 url各部分代表的意义
一个url的例子:
https://www.dahai.com:443/tech/ai.html?user=q1&time=1e8239473784#top
复制代码
url各部分代表的意义:
- http http/https: 协议
 - www.dahai.com 域名
 - :443 端口号 http 协议默认80,https默认443
 - /tech/ai.html 路径
 - ?user=q1&time=2323456 参数(可以有可以没有)放在?后面的都是告知服务器的数据
 - #top 锚点:(哈希)
 
四、HTTP报文
4.1 http报文是什么?
HTTP报文用于http协议交互的信息,因为http通信分为请求和响应两个阶段,所以报文分为两种;
- 请求报文
 - 响应报文
 
4.2 报文的结构:
报文分为:报文首部 空行 报文主体;
4.2.1 请求报文:
报文首部:请求首部分为请求行和请求头;请求行中包含 请求方法、协议、版本、URI 空行(CR+LF) 报文主体:客户端传递给服务端的数据
4.2.2 响应报文:
报文首部:状态行和响应头;状态行包含http协议版本,响应状态码 空行(CR+LF) 报文主体:响应体(服务端返回给客户端的数据)