一、概述
又看到这篇文章:juejin.cn/post/684490…
这边篇文章的结论是:
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
接口(本地还回),如图:
过滤端口:port 8081
,如图:
举例的是一次
GET
请求
[]
: 表示一次连接->
: 表示请求<-
: 表示返回
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
抓包结果如图:
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
抓包如图:
那包是不是不够大?
那再请求一次:
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
抓包如图:
可以看到是有一个 http 100
。
然而 http
状态码 100 的语义是:
100 Continue
:上传大文件前使用
由客户端发起请求中携带
Expect: 100-continue
头部触发。
确实是会先发送 header
, 并携带 Expect: 100-continue
,如图:
今天的文章一次 POST请求发送多个请求分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13591.html