Http协议
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。
【参考】
GET && POST
对比
关于tcp数据包:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
实际上get会产生一个tcp数据包,post会产生两个数据,这就会造成响应时间问题,但并不是所有的浏览器都是post发两次包,firefox不是。
GET
为获取数据
- 请求参数在url上体现,能看到—不安全
- 相当于数据库中的
SELECT
操作。
发送 数据 POST && PUT
put和post都是向服务器端发送数据,但put是幂等的,而post是非幂等。
所谓幂等,即多次发送同一个请求时候,产生的结果是一样的就是幂等性原则,这是为了当网络出现延迟等,服务器(客户端)之间发送请求没有收到回应,再重新发一次,实际上另一端已经接收到了第一次的请求,接着有接收第二次同一请求。如果是交易的业务没有幂等就会造成交易两次却只结算一次交易额。
POST
为提交数据
- 向服务器发送数据。
- 该请求,相当于
INSERT
操作。用于新增数据。
post用于提交表单或创建新资源- 安全性。比
GET
更安全。数据都是放在RequestBody
中- 数据量无上限。
PUT
为提交数据
- 也是向服务器发送消息
- 该请求像数据库中的
UPDATE
操作,用来修改数据;
(多次请求,最新一次会把上一次的请求数据覆盖)
put用于向服务器上传或更新资源
DELETE
就是删除某行,就像
DELETE
操作
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping 的区别
RESTFUL风格接口,常用的URL请求方式就包括了GET、POST、PUT、DELETE等
@RequestMaping
@RequestMaping主要是将HTTP请求映射到控制器方法上,用于接收HTTP请求。因此,@GetMapping其实写法就是@RequestMapping(method = RequestMethod.GET)
@GetMapping
- 用来获取数据;
- 类似 select
- 具有幂等性
@PostMapping
- 用来提交请求数据(表单)
- 类似 insert
- 需要考虑接口幂等性问题 ???
@PutMapping
- 用来修改数据
- -类似 update
- 本身就具有幂等性
@DeleteMapping
- 用来删除数据
- 类似于数据库中的delete
- 具有幂等性
示例
// insert
> @PostMapping(value = "/add")
> public void add(@RequestBody User user) {
>
> }
>
> // delete
> @DeleteMapping(value = "/delete/{id}")
> public void delete(@PathVariable String id) {
>
> }
>
> // update
> @PutMapping(value = "/update")
> public void update(@RequestBody User user) {
>
> }
>
> // select
> @GetMapping(value = "/get")
> public User get(@RequestParam String name)
> {
>
> }