【图解Http 学习摘要】三、HTTP 协议基础、四次挥手

时间:2021-07-04 16:04:47   收藏:0   阅读:47

HTTP 协议用于客户端和服务器端之间的通信,应用 HTTP 协议时,必定是一端担任客户端角色,另一端担任服务器端角色。

一、请求、响应报文

请求
技术分享图片

包含了:请求方法、请求 URI、协议版本、请求首部字段(可选)和内容实体。

响应
技术分享图片

包含了:协议版本、状态码(比如200)、用以解释状态码的原因短语、响应首部字段(可选)以及实体主体。

二、HTTP 是无状态的

1. 无状态

HTTP 是一种不保存状态,即无状态(stateless)协议,对于发送过的请求或响应都不做持久化处理。

技术分享图片

使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。

这样的目的是更快地处理大量事务,确保协议的可伸缩性,特意把 HTTP 协议设 计成如此简单的。

不过,随着web的发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。

HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于 是引入了 Cookie 技术。

Cookie 技术通过在请求和响应报文中写入Cookie 信息来控制客户端的状态。

三、HTTP 方法

用于告知服务器意图。

四、持久连接节省通信量

痛点

HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。
技术分享图片

但是随着发展,浏览一个 HTML 页面可能会包含很多内容,比如有多张图片,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销。

技术分享图片

持久连接

为解决上述 TCP 连接的问题,相出了持久连接的方法,也称为HTTP keep-alive 或 HTTP connection reuse。

只要任意一端 没有明确提出断开连接,则保持 TCP 连接状态。在建立 1 次 TCP 连接后进行多次请求和响应的交互。

技术分享图片

四次挥手

这里补充一个知识点。

“挥手”即表示要说再见。在上图所示,断开TCP连接的时候看到有4次交互,这就是4次挥手。

这一过程由客户端或服务端任一方执行,图示里就是由服务器端主动发起的,客户端被动关闭:

面试官爱追问:为什么连接的时候是三次握手,关闭的时候却是四次握手?

技术分享图片

1)三次握手

被动方收到主动方的 SYN 连接请求报文后,可以直接发送SYN+ACK报文。

其中 ACK 报文是用来应答的,SYN 报文是用来同步的。

2)四次挥手

首先,四次挥手是为了确保数据能够完整传输。

被动方收到主动方的 FIN 报文通知时,它仅仅表示主动方没有数据再发送给被动方了。

但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方

全部发送完成后再发送 FIN 报文给主动方,告诉主动方同意关闭连接。

所以这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的。

原文:https://www.cnblogs.com/pingguo-softwaretesting/p/14968618.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!