直接先看文章GET和POST区别
以下是个人三点补充(后续可能还会继续补充)
1 POST只是用来做修改,GET只能用来做查询?
其实这种思维是很死板的,只能说对post,get,put…不同类型请求的应用最好符合http协议规范,http协议推荐我们使用get做资源获取操作,post做资源添加操作,但并不是说非这样不可。举例:用get做资源添加操作
GET请求http://127.0.0.1:8011/demo4/test7?id=1&name=wzh&age=10请求如下接口(demo4是我在springboot配置的项目名)
@GetMapping("/test7")
public void addPerson(Integer id,String name,Integer age) throws IOException {
Person person = new Person();
person.builder().id(id).name(name).age(age).build();
saveToDB(person);//模拟插入数据库的方法
}
此外那么我们可以把复杂的参数转化为json字符串的形式,然后再接口中一个个的取,也不会很复杂啊。
但是get在各大浏览器和服务器中的参数长度的都被做了限制,而且大部分情况下参数附加到url后面也不会很安全
此外GET 是会被浏览器主动缓存的,如果下一次传输的数据相同,那么就会返回缓存中的内容,以求更快地展示数据,而且做参数往往只需要几个字段作为查询条件不会收到请求参数长度限制的影响。
2 get方式的请求参数只能放在url后面吗?
我们常见的get请求参数基本都长这个样子,如下
http://127.0.0.1:8011/demo4/test7?id=1&name=wzh&age=10
所以我们都潜意识的认为get请求的参数必须是附加到url后面,事实上大部分用法的确如此,因为主流web服务器如tomcat,本质是就是一个java servlet,在javaweb服务器中不支持对get请求请求体参数的处理,所以我们通常做java开发中都会把请求参数附加到url后面,但在http规范中肯定不会说get请求参数不能放到请求体里面,这完全是可以的,如下,举一个elasticsearch的例子啊,比较经典
3 安全性问题
参考文章中作者认为 POST 比 GET 更安全这个说法是有问题的。因为他觉得随便抓下包 POST 中的请求报文就暴露无疑了,但实际上,POST相比GET的确是安全的,POST中请求体的数据我们至少还要抓下包才能获取到,而GET中的数据我们大眼一看就能得到,如果你在某个登录或者注册时发现那个网站是用get方式来请求接口的,那么你账号密码身份证…都被当做参数附加在url上了而且还没加密,难以想象。
4 POST和GET的应用时机
GET请应用时机
- 凡是浏览器请求都是get请求,因为浏览器就是做浏览的,浏览器的任务就是在互联网中找到资源然后返回给你,至于说什么互联网资源的增删改和人家浏览器有什么关系?
- 点击链接跳转
- 表单默认提交方式
发送post请求的情况
- 设置表单method = “post”