0
点赞
收藏
分享

微信扫一扫

[wireshark] 之 一个 POST 请求会发多少个请求


文章目录

  • ​​一、概述​​
  • ​​二、实验​​
  • ​​(1) 启动服务,端口 8081​​
  • ​​(2)启动 `wireshark`,过滤对应端口​​

一、概述

又看到这篇文章:https://juejin.cn/post/6844903433674178574

这边篇文章的结论是:

​GET​​​ 产生一个 ​​TCP​​​ 数据包;​​POST​​​ 产生两个 ​​TCP​​ 数据包。

  • 对于​​GET​​ 方式的请求,浏览器会把 ​​http header​​ 和 ​​data​​ 一并发送出去,服务器响应 ​​200​​ (返回数据);
  • 对于​​POST​​,浏览器先发送 ​​header​​,服务器响应 ​​100 continue​​,浏览器再发送 ​​data​​,服务器响应 ​​200​​ (返回数据)。

那么就想着动手来验证一下。

先说实验结果:

  1. 简单​​POST​​​ 请求,产生一个​​TCP​​ 包(相对应概念)
  2. 请求的数据过大,客户端会先发​​header​​​请求并携带​​Expect: 100-continue​​​,服务端响应会返回​​HTTP/1.1 100​​ ,之后才会发送真正请求数据
  3. 概念上:​​TCP​​ 是流式



二、实验

实验步骤:

  1. 启动服务,端口 8081
  2. 启动​​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 请求会发多少个请求_抓包

过滤端口:​​port 8081​​,如图:

举例的是一次 ​​GET​​ 请求

[wireshark] 之 一个 POST 请求会发多少个请求_java_02

  • ​[]​​ : 表示一次连接
  • ​->​​ : 表示请求
  • ​<-​​ : 表示返回
  1. ​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

  1. ​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

那包是不是不够大?

那再请求一次:

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

可以看到是有一个 ​​http 100​​。

然而 ​​http​​ 状态码 100 的语义是:

  • ​100 Continue​​ :上传大文件前使用

由客户端发起请求中携带 ​​Expect: 100-continue​​ 头部触发。

确实是会先发送 ​​header​​​, 并携带 ​​Expect: 100-continue​​,如图:

[wireshark] 之 一个 POST 请求会发多少个请求_4s_06


举报

相关推荐

0 条评论