注意:GET 请求无请求体,可以是可以有请求体 body 的,但是不建议带。
为什么不建议带请求体?
:::details 由文心大模子 3.5 生成
在 HTTP 协议中,GET 请求通常用于请求数据,而 POST 请求则通常用于提交数据。这是因为 GET 和 POST 请求在语义和使用上有一些不同:
语义上的不同:
GET 请求:通常用于请求数据,它的语义是“获取”或“查询”。浏览器会把 GET 请求的效果(相应体)直接展示给用户。
POST 请求:通常用于提交数据,它的语义是“提交”或“更新”。POST 请求的效果通常是一个操纵的效果,而不是直接展示给用户的数据。
请求体的处置惩罚:
GET 请求:虽然 GET 请求可以包含请求体(body),但大多数 HTTP 客户端和服务器在处置惩罚 GET 请求时都会忽略请求体。这是因为 GET 请求的筹划初衷就是为了从服务器获取数据,而不是提交数据。GET 请求的查询参数应该放在 URL 的查询字符串中,而不是请求体中。
POST 请求:POST 请求通常包含请求体,用于提交数据给服务器。服务器会处置惩罚 POST 请求的请求体来获取提交的数据。
缓存和书签:
GET 请求是幂等的和安全的,这意味着多次执行相同的 GET 请求应该得到相同的效果,并且不会改变服务器上的任何数据。因此,浏览器通常会对 GET 请求举行缓存。假如 GET 请求包含请求体,这大概会导致缓存行为不一致或不可预测。
由于 GET 请求的 URL 通常会被浏览器记载在历史记载或书签中,假如 URL 中包含了敏感信息(这些信息通常应该放在请求体中),那么这些信息大概会被泄露。
URL 长度限制:
浏览器和服务器通常对 URL 的长度有肯定的限制。假如 GET 请求包含大量的数据在 URL 中(通过查询参数),这大概会导致 URL 超过长度限制。
安全性:
将敏感信息(如密码、私钥等)放在 GET 请求的 URL 中是不安全的,因为这些信息大概会被记载在浏览器历史、服务器日志或代理缓存中。这些信息应该通过 POST 请求放在请求体中,并使用得当的加密和身份验证机制来保护。
综上所述,虽然技术上 GET 请求可以包含请求体,但出于上述原因,通常不建议在 GET 请求中包含请求体。在实际开发中,应该根据请求的性子和目标选择合适的 HTTP 方法,并遵照相应的最佳实践。
::: 1.1.1. 使用 GET 方式举行无参请求
接口
@GetMapping("/get/getAll")
public ResResult getAllUser(){
List<User> list = userService.list();
return ResResult.okResult(list);
}
复制代码
请求
axios({
url:'http://localhost:8080/get/getAll',
method:'get'
}).then(res=>{
console.log(res.data.data)
})
复制代码
1.1.2. 使用 GET 方式请求,参数值直接放在路径中
接口
@GetMapping("/get/{id}")
public ResResult getUserById(@PathVariable("id") Long id){
User user = userService.getById(id);
return ResResult.okResult(user);
}
复制代码
请求
axios({
url:'http://localhost:8080/get/1',
method:'get'
}).then(res=>{
console.log(res.data.data)
})
复制代码
1.1.3. 使用 GET 方式请求,参数拼接在路径中
拼接方式 ①
使用 ? 举行参数拼接
接口
@GetMapping("/get")
public ResResult getUserByIds(@RequestParam("id") Long id){
User user = userService.getById(id);
return ResResult.okResult(user);
}
复制代码
请求
axios({
url:'http://localhost:8080/get?id=1',
method:'get'
}).then(res=>{
console.log(res.data.data)
})
复制代码
拼接方式 ②
使用 params 【单个参数】
接口
@GetMapping("/get")
public ResResult getUserByIds(@RequestParam("id") Long id){
User user = userService.getById(id);
return ResResult.okResult(user);
}
复制代码
请求
axios({
url:'http://localhost:8080/get',
params:{
id:'2'
},
method:'get'
}).then(res=>{
console.log(res.data.data)
})
复制代码
拼接方式 ③
使用 params 【多个参数】
接口
@GetMapping("/get")
public ResResult getUserByIds(@RequestParam("id") Long id,@RequestParam("username") String username){
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();