HTTP 阶段性总结

一 .简单来说 ,HTTP是一个连接 客户端 —服务器 的协议,它指定了客户端发给服务器什么样的消息以及得到什么样的响应。http的特点:

   1.支持客户端/服务器的模式  :如上可以连接客户端和服务器端;

   2. 简单、快速、灵活 : 请求连接只需要传输 方法 、路径 、请求主体,内容格式多种

   3. 无连接的:请求一次结束立即断开(可以通过自身属性keep-live设置http连接的保持时间);

   4.  无状态的:无法记住上一次请求的状态(HTTP 协议本身无法解决这个状态,现在通常用cookie 或者session来解决,常见场景cookie中保存token  ,登录状态保持);

二 . http的请求过程:

在前端面试中, 经常问到的一个题目, 在浏览器地址栏输入URL 都发生了什么?  

抛开HTML渲染, 先http 解析的部分 :HTTP(S)请求地址—— DNS 解析 —— TCP三次握手(建立连接)——发送请求——TCP四次挥手(断开连接);

下面是 TCP/IP的通信的流程图(图片来源网络);

TCP 握手详情  (建立连接协议,三次握手);

1.第一次握手,客户端发送syn包(syn=x)的数据包到服务器,等待服务器确认;

2.第二次握手,服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包

3. 第三次握手,客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,

 TCP  握手过程传送的数据 , 不包含数据, 三次握手完成后, 客户端和服务器才正式开始传送请求数据,理想状态下,TCP连接建立后, 除非通信双方任何一方主动关闭, 连接会一直保持;

 TCP 挥手详情(断开连接协议,四次挥手);

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭 ;客户端   和服务器 的每个方向需要单独关闭,也即 当一方完成它的数据传输后, 需要单独发信息来终止该方向的连接。

第一次挥手: 主动关闭方会发送一个Fin信息,告知被动关闭方: “我不会给你发送数据了。”( 在发出第一个Fin包之后, 如果主动关闭方没有收到确认报文(ACK),还会重新发送Fin信息),此时主动关闭方,还是能够接收数据的;

第二次挥手: 被动关闭方收到Fin包后, 会发送ACK 包 告诉对方: “好的,我知道了。”

第三次挥手: 被动关闭方发送一个Fin 包, 用来关闭被动关闭方到主动关闭方的数据输送,也就是告诉对方 ,我的数据传送完了,我也不给你发送数据了。

第四次挥手: 主动关闭方收到 Fin, 发送ACK : 好的。到此,完成四次挥手。

发布了16 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42317878/article/details/102764148