文章目录
- 一、概述
- 二、实验
- (1) 启动服务,端口 8081
- (2)启动 `wireshark`,过滤对应端口
一、概述
又看到这篇文章:https://juejin.cn/post/6844903433674178574
这边篇文章的结论是:
GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。
- 对于
GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200 (返回数据); - 对于
POST,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 (返回数据)。
那么就想着动手来验证一下。
先说实验结果:
- 简单
POST 请求,产生一个TCP 包(相对应概念) - 请求的数据过大,客户端会先发
header请求并携带Expect: 100-continue,服务端响应会返回HTTP/1.1 100 ,之后才会发送真正请求数据 - 概念上:
TCP 是流式
二、实验
实验步骤:
- 启动服务,端口 8081
- 启动
wireshark,过滤对应端口
-
GET 请求 -
POST 请求
(1) 启动服务,端口 8081
使用springboot ,启动服务:
Tips : 是在本地启动的。
@RestController
class HelloController {
@GetMapping("/test/1")
public String test1() {
return "123";
}
@PostMapping("/test/2")
public String test2(@RequestBody Object o) {
System.out.println(o.toString());
return "456";
}
}
(2)启动 wireshark,过滤对应端口
因为是本地请求访问本地服务,所以要选择 loopback接口(本地还回),如图:
![在这里插入图片描述 [wireshark] 之 一个 POST 请求会发多少个请求_抓包](https://file.cfanz.cn/uploads/png/2022/10/21/8/15fG59I3PO.png)
过滤端口:port 8081,如图:
举例的是一次 GET 请求
![在这里插入图片描述 [wireshark] 之 一个 POST 请求会发多少个请求_java_02](https://file.cfanz.cn/uploads/png/2022/10/21/8/c927a1f96d.png)
-
[] : 表示一次连接 -
-> : 表示请求 -
<- : 表示返回
-
GET 请求
请求:
donald@donald-pro:~$ curl http://localhost:8081/test/1 -i
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 3
Date: Fri, 12 Mar 2021 01:51:35 GMT
123
wireshark 抓包结果如图:
![在这里插入图片描述 [wireshark] 之 一个 POST 请求会发多少个请求_java_02](https://file.cfanz.cn/uploads/png/2022/10/21/8/c927a1f96d.png)
-
POST 请求
请求:
donald@donald-pro:~$ curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"name": "donald"}' http://localhost:8081/test/2 -i
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Content-Length: 3
Date: Fri, 12 Mar 2021 02:08:27 GMT
456
wireshark 抓包如图:
![在这里插入图片描述 [wireshark] 之 一个 POST 请求会发多少个请求_wireshark_04](https://file.cfanz.cn/uploads/png/2022/10/21/8/c53SDdC361.png)
那包是不是不够大?
那再请求一次:
donald@donald-pro:~$ curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"name": "donald", "data": "iVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAAiVBORw0KGgoAAAANSUhEUgAAAhwAAAHkCAIAAAD6tWHCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT5x8H8OcuO4SwNwioiOBCBbd1b61ba7V1oNZta20VF4K21lVrHWirVisO1J+Kq7bOuq0DB0NFEZANCZC97p7fH1fTCIjYxkTN9/3yj+TJc5fvnZAPd89zFwJjjAAAAABzIK1dAAAA"}' http://localhost:8081/test/2 -i
HTTP/1.1 100
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Content-Length: 3
Date: Fri, 12 Mar 2021 02:45:16 GMT
456
wireshark 抓包如图:
![在这里插入图片描述 [wireshark] 之 一个 POST 请求会发多少个请求_抓包_05](https://file.cfanz.cn/uploads/png/2022/10/21/8/cHLLZP37RK.png)
可以看到是有一个 http 100。
然而 http 状态码 100 的语义是:
-
100 Continue :上传大文件前使用
由客户端发起请求中携带 Expect: 100-continue 头部触发。
确实是会先发送 header, 并携带 Expect: 100-continue,如图:
![在这里插入图片描述 [wireshark] 之 一个 POST 请求会发多少个请求_4s_06](https://file.cfanz.cn/uploads/png/2022/10/21/8/0U72D6AfZ1.png)










